问题
我正在尝试将 260x310px PNG 的大小调整为 120x120px,同时还保留透明度并使图像居中。我在下面包含了我正在使用的功能,它在图像外观方面工作得很好,但是创建的图像要大得多。事实上,所有图像看起来都是 128kb(有数千个我还没有看过它们),尽管图像大小超过一半(以像素为单位),但包含 50,000 个这些图像的目录要大 1gb。
我想这是因为 PHP 没有像 Photoshop 那样做任何优化。我可以做些什么来优化 PHP 中的图像吗?
编码
这是我的代码:
if ($handle = opendir($mydir_path)) {
while (false !== ($entry = readdir($handle))) {
if(strpos($entry, '.png'))
{
resize($mydir_path.$entry);
}
}
closedir($handle);
}
function resize($img_loc)
{
$mini_loc = str_replace('megapack', 'handheld_megapack', $img_loc);
$canvas = imagecreatetruecolor(310, 310);
imagefill($canvas, 0, 0, imagecolorallocatealpha($canvas, 255, 255, 255, 127));
imagealphablending($canvas, false);
imagesavealpha($canvas, true);
$img = imagecreatefrompng($img_loc);
imagecopy($canvas, $img, 25, 0, 0, 0, 260, 310);
$resizedImg = imagecreatetruecolor('120', '120');
imagefill($resizedImg, 0, 0, imagecolorallocatealpha($resizedImg, 255, 255, 255, 127));
imagealphablending($resizedImg, false);
imagesavealpha($resizedImg, true);
imagecopyresampled($resizedImg, $canvas, 0, 0, 0, 0, '120', '120', '310', '310');
$dirname = dirname($mini_loc);
imagepng($resizedImg, $mini_loc, '0');
chmod($mini_loc, 0666);
return $mini_loc;
}