php 创建像素化图像

php created image pixelated

我制作了一个应用程序,用户可以在其中上传图像,使用 jCrop 对其进行裁剪,然后通过电子邮件将其发送给他。 一切都按预期工作,但创建图像的 php 脚本似乎在 cropping/resizing 时稍微降低了质量。这不是极端的,但我需要与已上传的图像相同的分辨率。我有 imagejpg() 并用 imagepng() 更改它,但没有成功。 也许你可以帮助我。 这是代码:

list($oWidth, $oHeight) = getimagesize($_POST["hiddenSrc"]);
$xPos = $_POST["x1h"];
$yPos = $_POST["y1h"];
$targ_w = $_POST["wh"];
$targ_h = $_POST["hh"];
$jpeg_quality = 9;

$src = $_POST["hiddenSrc"];


if(mime_content_type($src) == "image/jpeg")
{
    $img_r = imagecreatefromjpeg($src);
}
else if(mime_content_type($src) == "image/png")
{
    $img_r = imagecreatefrompng($src);
}

$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );

    imagecopyresampled($dst_r,$img_r,0,0,$xPos,$yPos,$targ_w,$targ_h,$targ_w,$targ_h);

if(!file_exists('../FOLDER/'.$_SESSION['foldername'].'/PRODUKT'.$_SESSION['productNameCount'].'.png'))
{
            imagepng($dst_r,"../FOLDER/".$_SESSION['foldername']."/PRODUKT".$_SESSION['productNameCount'].".png",$jpeg_quality);
}

脚本的其余部分只是创建文件夹和其他与图像无关的东西

非常感谢!

剩下的就是一些判断图片不是太小的函数了,等等

这是一个 before/after 比较:

我知道差异很小,但打印图像时非常明显

我认为您的情况与您用于压缩的值有关。

对于 imagejpeg:质量是可选的,范围从 0(质量最差,文件较小)到 100(质量最好,文件最大)。默认是默认的IJG质量值(75左右)。

对于 imagepng:压缩级别从 0(无压缩)到 9。

这是一个示例,说明您的情况可能会出现什么结果:

list($oWidth, $oHeight) = getimagesize($_POST["hiddenSrc"]);
$xPos = $_POST["x1h"];
$yPos = $_POST["y1h"];
$targ_w = $_POST["wh"];
$targ_h = $_POST["hh"];

$src = $_POST["hiddenSrc"];


if(mime_content_type($src) == "image/jpeg")
{
    $img_r = imagecreatefromjpeg($src);
    $jpeg_quality = 90;
}
else if(mime_content_type($src) == "image/png")
{
    $img_r = imagecreatefrompng($src);
    $png_quality = 0;
}

$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );

    imagecopyresampled($dst_r,$img_r,0,0,$xPos,$yPos,$targ_w,$targ_h,$targ_w,$targ_h);

if(!file_exists('../FOLDER/'.$_SESSION['foldername'].'/produkt'.$_SESSION['productNameCount'].'.png'))
{
            imagepng($dst_r,"../FOLDER/".$_SESSION['foldername']."/PRODUKT".$_SESSION['productNameCount'].".png",$png_quality);
}

替换

$jpeg_quality = 9;

$jpeg_quality = 100;

您可以使用 0 到 100 之间的任何值

终于找到问题了

我将上传的图像传输到数据-url,这降低了质量。如果我直接上传图像文件,质量保持不变。 (+ 我正在使用 Imagemagick)

但现在我在调整图像大小时遇到​​了质量损失的问题,但那是另一回事了;)

谢谢大家