使用PHP创建图像 - 文件大小

时间:2012-12-23 20:07:25

标签: php image-processing png image-resizing imagecreatefrompng

问题

我正在尝试将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;
}

1 个答案:

答案 0 :(得分:1)

尽管可以使用PHP优化文件,但最简单的方法是通过像pngcrush这样的程序来运行它。

使用GD,您可以尝试使用imagepng“quality”的第三个参数并将其设置为9(您将其设置为0 =无压缩)但使用专门的PNG优化器可以获得更多。 / p>

另请查看此问题:PNG optimisation tools