2015-08-24 53 views
2

我做了一个应用程序,用户可以上传图像,使用jCrop裁剪,然后通过电子邮件发送给他。 一切都按预期工作,但创建图像的php脚本似乎在裁剪/调整大小时会降低质量。这并不是极端的,但我需要与上传的图像相同的分辨率。我有imagejpg()并用imagepng()改变它,但没有成功。 也许你可以帮助我。 下面的代码:php创建图像像素化

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

我知道其中的差别是很小的,但是当图像被印

+0

顺便说一句,请记住,在区分大小写的文件系统上(在Unix服务器上常见),您检查存在的文件将与您正在编写的文件不同,因为您已在一个地方编写了“produkt”,而“PRODUKT”在另一个。您应该一次创建路径作为变量并在两个地方使用。 –

+0

jep,你说得对,谢谢。我修正了它;) – user2839873

回答

0

我终于明白了这个问题。

我把上传的图像转移到了数据网址,这降低了质量。如果我直接上传图像文件,质量保持不变。 (+我使用ImageMagick)

但现在我遇到了质量损失的麻烦,同时调整图像,但这是另一个故事,另一个线程;)

感谢所有

1

我认为,这是很明显的你的情况与你用于压缩的值有关。

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); 
} 
+0

请记住,对于PNG文件,它只是实际文件的大小,它将受到压缩值的影响;图像质量将保持不变。 (对于PNG文件,压缩值基本上输入到zlib库的压缩因子中压缩最终结果的数据;它不会更改基础图像数据。) –

+0

谢谢,我以前只用jpeg设置质量并设置质量到100,但它似乎没有使质量甚至对原始图像。 – user2839873

+0

我尝试了你的解决方案,但没有任何改变:(我不知道大小调整后的图像看起来像太锋利,所以强烈的色彩曝光过度,te不完全清晰,我会在比较之前添加一个/之后的图像 – user2839873

0

更换

$jpeg_quality = 9; 

$jpeg_quality = 100; 

你可以使用零和100之间的任何值

+0

嘿,我已经试过了,但它似乎并没有解决我的问题 – user2839873