PHP imagick-压缩时的白色方形

PHP imagick-压缩时的白色方形,php,web,imagick,Php,Web,Imagick,这是我的PHP代码(使用Imagick),我使用它在显示图像之前压缩图像 然而,每次我运行它,结果都是一样的:一个带白色边框的黑色正方形,没有任何php错误 你能解释一下这个问题是从哪里来的吗 多谢各位 $id=$\u GET['id']; $compression=$_GET['compr']; $backgroundImagick=新Imagick(realpath(PHOTO_PATH.$id..jpg')); $imagick=新的imagick(); $imagick->setComp

这是我的PHP代码(使用Imagick),我使用它在显示图像之前压缩图像

然而,每次我运行它,结果都是一样的:一个带白色边框的黑色正方形,没有任何php错误

你能解释一下这个问题是从哪里来的吗

多谢各位

$id=$\u GET['id'];
$compression=$_GET['compr'];
$backgroundImagick=新Imagick(realpath(PHOTO_PATH.$id..jpg'));
$imagick=新的imagick();
$imagick->setCompression(imagick::COMPRESSION\u JPEG);
$imagick->setCompressionQuality($compression);
$imagick->newPseudoImage(
$backgroundImagick->getImageWidth(),
$backgroundImagick->getImageHeight(),
“画布:白色”
);
$imagick->compositeImage(
$backgroundImagick,
Imagick::复合材料,
0,
0
);
标题(“内容类型:图像/jpg”);
echo$imagick->getImageBlob();
以及结果的屏幕截图:

编辑:我的访问代码

## contrôle du cache navigateur - Expire headers
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 7200 seconds"
    ExpiresByType image/jpg             "access plus 1 week"
    ExpiresByType image/jpeg            "access plus 1 week"
    ExpiresByType image/png             "access plus 1 week"
    ExpiresByType image/gif             "access plus 1 week"
    ExpiresByType image/svg+xml         "access plus 1 week"
    AddType image/x-icon .ico
    ExpiresByType image/ico             "access plus 1 week"
    ExpiresByType image/icon            "access plus 1 week"
    ExpiresByType image/x-icon          "access plus 1 week"
    ExpiresByType text/css              "access plus 1 week"
    ExpiresByType text/javascript       "access plus 1 week"
    ExpiresByType text/html             "access plus 7200 seconds"
    ExpiresByType application/xhtml+xml     "access plus 7200 seconds"
    ExpiresByType application/javascript    "access plus 1 week"
    ExpiresByType application/x-javascript  "access plus 1 week"
    ExpiresByType application/x-shockwave-flash "access plus 1 week"
</IfModule>

ErrorDocument 404 /index.php?page=404
ErrorDocument 403 /index.php?page=403

Options -Indexes
RewriteEngine on
Options All -Indexes

# AJOUT SLASH FIN URL 
RewriteCond %{REQUEST_URI} (/[^.]+)[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI}/ [R=307,L] 

# STANDARD
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?page=$1 [NC,L,QSA]

##缓存导航控件-过期标头
过期于
ExpiresDefault“访问加7200秒”
ExpiresByType图像/jpg“访问加1周”
过期按类型图像/jpeg“访问加1周”
ExpiresByType图像/png“访问加1周”
ExpiresByType image/gif“访问加1周”
ExpiresByType图像/svg+xml“访问加1周”
AddType image/x-icon.ico
ExpiresByType图像/ico“访问加1周”
ExpiresByType图像/图标“访问加1周”
ExpiresByType图像/x图标“访问加1周”
ExpiresByType文本/css“访问加1周”
ExpiresByType文本/javascript“访问加1周”
ExpiresByType text/html“访问加7200秒”
ExpiresByType应用程序/xhtml+xml“访问加7200秒”
ExpiresByType应用程序/javascript“访问加1周”
ExpiresByType应用程序/x-javascript“访问加1周”
过期按类型应用程序/x-shockwave-flash“访问加1周”
ErrorDocument 404/index.php?页面=404
ErrorDocument 403/index.php?页面=403
选项-索引
重新启动发动机
选项所有-索引
#AJOUT斜杠鳍URL
重写cond%{REQUEST_URI}(/[^.]+)[^/]$
重写规则^(.*)$http://%{http_HOST}%{REQUEST_URI}/[R=307,L]
#标准
重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$/index.php?页面=$1[NC,L,QSA]
最后是index.php文件:

<?php
require('include.php');

if(isset($_GET['page'])){
    $Page = strtolower($_GET['page']);
    $Page = str_replace('/', '', $Page);
}
else{
    $titre = SITENAME. ' | accueil';
    $desc = 'Accueil de '.SITENAME;
    $Page = 'index';
}

if(!empty($_POST) && isset($_POST['form'])){
    $form = $_POST['form'];
    if(is_file('php/doForm/'.$form.'.php')){
        require('php/doForm/'.$form.'.php');
    }
}

switch($Page){
    case 'login' :  $titre = SITENAME.' | Se connecter'; 
                    $desc = 'Se connecter à son compte | '.SITENAME;
    break;
    case 'register' :   $titre = SITENAME.' | Création de compte';
                        $desc = 'Se créer un compte sur '.SITENAME;
    break;
    case 'collections' :    $titre = SITENAME. ' | Collections';
                            $desc = 'Collections de photos | '.SITENAME;
    break;
    case 'administration'   :   $titre = SITENAME. ' | Administration';
                                $desc = 'Admin';
    break;
    case 'profil'   :   $titre = SITENAME. ' | Votre profil';
                        $desc = "Consulter et modifier vos informations de compte sur ".SITENAME;
    break;
    default :   $titre = SITENAME;
                $desc = SITENAME;
    break;
}


?>

<html>

    <style>
        :root{
            --background: <?= $Vars->GetVar('css_background') ?>;
            --inv-background: <?= $Vars->GetVar('css_inv-background') ?>;
            --color: <?= $Vars->GetVar('css_color') ?>; 
            --gris: <?= $Vars->GetVar('css_gris') ?>;
            --color-fonce: <?= $Vars->GetVar('css_color-fonce') ?>;
            --color-fonce1: <?= $Vars->GetVar('css_color-fonce1') ?>;
            --color-fonce2: <?= $Vars->GetVar('css_color-fonce2') ?>;
            --section-2: <?= $Vars->GetVar('css_section-2') ?>;
            --cadre-photos: <?= $Vars->GetVar('css_cadre-photos') ?>;
            --titres-section2: <?= $Vars->GetVar('css_titres-section2') ?>;
            --utm: 'UTMNeutra';
            --def-font: Verdana, Geneva, Tahoma, sans-serif;
        }
    </style>
    <head>
        <title> <?= $titre ?> </title>
        <meta name='description' content="<?=$desc?>" />
        <link rel="stylesheet" href="<?= URL.'css/style.css' ?>" />     
        <meta name='keywords' content="<?= KEYWORDS ?>" />
    </head>
    <body>
        <div class='header'>
            <?php include "pages/header.php"; ?>
        </div>

        <div class='content'>
            <?php 
                switch($Page) {
                    case '404' :    include('pages/404.html');

                    break;

                    case '403' :    include('pages/404.html');
                                    header("HTTP/1.0 403 Missing permissions", true, 403);
                    break;

                    case 'admini' : include "administration/index.php";
                    break;

                    default :   if(@is_file("pages/{$Page}.php"))
                                    include "pages/{$Page}.php";        
                                else
                                    $Page = 404;
                                    include "pages/404.html";
                                    include('pages/404.html');
                    break;
                }
            ?>
            
        </div>  

        <div class='footer'>
            <?php include "pages/footer.php"; ?>
        </div>
    </body>
</html>


:根{
--背景:;
--投资背景:;
--颜色:;
--格里斯:;
--颜色方:;
--色粉1:;
--色粉2:;
--第2节:;
--干部照片:;
--第2节:滴定度;
--utm:‘UTMNeutra’;
--def字体:Verdana,日内瓦,塔荷马,无衬线;
}

我发现您的代码也有错误,但发现您可以直接在$backgroundImagick上设置压缩,而无需使用
setImageCompressionQuality
而不是
setCompressionQuality
创建新的合成图像:

$id = $_GET['id'];
$compression = $_GET['compr'];

$backgroundImagick = new Imagick(realpath(PHOTO_PATH.$id.'.jpg'));
$backgroundImagick->setImageCompressionQuality($compression);

header("Content-Type: image/jpg");
echo $backgroundImagick->getImageBlob(); 

由于您在使用Imagick时遇到很多问题,也许您可以使用GD来代替

$id = $_GET['id'];
$compression = $_GET['compr'];

$img = imagecreatefromjpeg(realpath(PHOTO_PATH.$id.'.jpg'));

header("Content-Type: image/jpg");
imagejpeg($img,null,$compression);

谢谢你的回答!不幸的是,我仍然有同样的结果。。。(我的基本图像是一个.jpg,这不是问题吗?)。这仅仅是一张你有问题的图片还是全部?我的测试是在PHP7.3和Imagick 3.4.4(ImageMagick 6.9.7-4 Q16 x86_64 20170114)上完成的。您有什么版本可以让我尝试复制?你能分享一个失败的图像吗?嗨,我只是用另一个图像重新测试了一下,但我还是得到了同样的结果。(有问题的图片:)对于版本,我在Debian 10上,我有PHP7.3.19-1~deb10u1和Imagick 3.4.3刚刚用你的图片进行了测试,我的代码对我来说很好,你的版本也没什么不同。我现在想知道你是否可以在浏览器中获得缓存图像?您是否尝试过使用开发人员工具禁用缓存?或者,它可能是从错误的文件夹加载的,您是否尝试过硬编码图像路径?我只是对照片的路径提出了疑问,并清空了缓存,但仍然存在相同的问题,并且没有php错误。好的,因此它不是来自代码,而是来自htaccess(不是照片的路径)。我不知道为什么,但是当我访问URL“site.com/showimage/?id=xxxxx&compr=75”时,我会得到白色的方块,但当我访问页面(“site.com/pages/showimage.php?id=xxxxx&compr=75”)时不会得到。知道我为什么会有这个问题吗?啊,很有趣。您使用的是PHP框架吗?如果是,是哪一个?一般来说,对于这样的问题,我会使用xdebug一步一步地检查代码,看看发生了什么。我想知道是否在代码中的某个地方设置了额外的头,我会在浏览器的开发者工具中检查响应。如果没有所有的代码,我将很难进一步提供帮助,但至少您已经向前迈出了一步。我不使用框架,您希望代码是什么?重定向还是压缩代码?(顺便说一句,没有发送额外的标题)。好的,在这种情况下,您可以将htaccess代码添加到问题中,我将在我的版本中尝试使用它吗?另外,如果在您已经提供的内容之前或之后有任何相关代码谢谢,从中我可以看到它被重写为index.php,那么index.php中如何包含showimage.php,它是简单的require还是include?可以在问题中添加index.php代码吗?另外,在htaccess中更改mod_expires可能是值得的。在开发时,将image/jpg设置为非常小的值,这样可以消除缓存问题。之后需要再次清除浏览器缓存。还将ExpiresDefault设置为非常小的值。