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)
但现在我在调整图像大小时遇到了质量损失的问题,但那是另一回事了;)
谢谢大家
我制作了一个应用程序,用户可以在其中上传图像,使用 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)
但现在我在调整图像大小时遇到了质量损失的问题,但那是另一回事了;)
谢谢大家