Kai*_*ack 8 php png resize image
我很困惑为什么使用GD库调整大小的PNG图像的尺寸比原始尺寸大得多.
这是我用来调整图像大小的代码:
// create image from posted file
$src = imagecreatefrompng($file['tmp_name']);
// get original size of uploaded image
list($width,$height) = getimagesize($file['tmp_name']);
if($width>$maxImgWidth) {
// resize the image to maxImgWidth, maintain the original aspect ratio
$newwidth = $maxImgWidth;
$newheight=($height/$width)*$newwidth;
$newImage=imagecreatetruecolor($newwidth,$newheight);
// fill transparent with white
/*$white=imagecolorallocate($newImage, 255, 255, 255);
imagefill($newImage, 0, 0, $white);*/
// the following is to keep PNG's alpha channels
// turn off transparency blending temporarily
imagealphablending($newImage, false);
// Fill the image with transparent color
$color = imagecolorallocatealpha($newImage,255,255,255,127);
imagefill($newImage, 0, 0, $color);
// restore transparency blending
imagesavealpha($newImage, true);
// do the image resizing by copying from the original into $newImage image
imagecopyresampled($newImage,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
// write image to buffer and save in variable
ob_start(); // Stdout --> buffer
imagepng($newImage,NULL,5); // last parameter is compression 0-none 9-best (slow), see also http://www.php.net/manual/en/function.imagepng.php
$newImageToSave = ob_get_contents(); // store stdout in $newImageToSave
ob_end_clean(); // clear buffer
// remove images from php buffer
imagedestroy($src);
imagedestroy($newImage);
$resizedFlag = true;
}
Run Code Online (Sandbox Code Playgroud)
然后我将$ newImageToSave保存为mysql数据库中的blob.
我试图阻止alpha通道,只是设置白色背景,文件大小没有重大变化.我尝试设置"压缩"参数(0到9),但仍然比原始参数大.
示例
I拍摄此图像(1058px*1296px)并将其调整为900px*1102px.这些是结果:
原始文件:328 KB
PNG(0):3,79 MB
PNG(5):564 KB
PNG(9):503 KB
任何提示如何使调整大小的图像的文件大小更小是值得赞赏的.
-
PS:我认为它可能是位深度,但正如您所看到的,上面的示例图像有32位,而调整大小的图像是24位.
Bab*_*aba 11
您没有调用大多数函数来减少图像imagefill,imagealphablending等等可能会导致文件更大.
保持透明使用imagecreate而不是imagecreatetruecolor只做一个简单的调整大小
$file['tmp_name'] = "wiki.png";
$maxImgWidth = 900;
// create image from posted file
$src = imagecreatefrompng($file['tmp_name']);
// get original size of uploaded image
list($width, $height) = getimagesize($file['tmp_name']);
if ($width > $maxImgWidth) {
$newwidth = $maxImgWidth;
$newheight = ($height / $width) * $newwidth;
$newImage = imagecreate($newwidth, $newheight);
imagecopyresampled($newImage, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagepng($newImage, "wiki2.png", 5);
imagedestroy($src);
imagedestroy($newImage);
$resizedFlag = true;
}
Run Code Online (Sandbox Code Playgroud)
最终大小:164KB
| 归档时间: |
|
| 查看次数: |
6024 次 |
| 最近记录: |