如何在PHP中优化图像?
我有一个网站,用户可以保存他们的个人资料图像(头像) 我想在加载图像时对其进行一些优化 我的意思是,它是一个化身图像,不需要全分辨率,也不需要很大的尺寸 我能做什么?我一直在想:如何在PHP中优化图像?,php,image-processing,imagemagick,gd,Php,Image Processing,Imagemagick,Gd,我有一个网站,用户可以保存他们的个人资料图像(头像) 我想在加载图像时对其进行一些优化 我的意思是,它是一个化身图像,不需要全分辨率,也不需要很大的尺寸 我能做什么?我一直在想: 调整大小 降低质量 可能的: 将其转换为GIF格式 透明PNG的颜色填充 有一些比GD更好(更简单)的库可以做到这一点吗 非常感谢 我会为你的页面选择一些标准的头像图像大小,比如 中等大小的个人资料页,如果您有一个和 显示在用户帖子旁边的小尺寸 你有了这个想法,正是你需要的 当用户上传一个新的头像时,你可以
- 调整大小
- 降低质量
- 将其转换为GIF格式
- 透明PNG的颜色填充
非常感谢 我会为你的页面选择一些标准的头像图像大小,比如
- 中等大小的个人资料页,如果您有一个和
- 显示在用户帖子旁边的小尺寸
- 你有了这个想法,正是你需要的
大小调整和其他成像操作最好在上传新图像后进行(除非您想保存更高的分辨率以用于其他目的)。GD就是这样做的。这听起来像是一个简单的操作,但是如果你要这样做的话,有很多因素是你真正想做的。总而言之,这需要几百行代码来处理所有的事情 我的建议是,尽管您可能希望调整图像大小(如果使用JPEG,则需要有损重新压缩),但将其转换为GIF是一个坏主意。您不知道源类型是什么,因此这样做是有问题的 以下是我推荐的流程: 1) 将图像调整为您的输出格式。如果需要,也可以在此处强制剪切纵横比 2) 确定原始源模式:
- 8位索引(GIF/PNG8):另存为PNG8(格式往往小于GIF)
- 16-24位:另存为JPG。质量取决于您,但70%是一个很好的基准
- 32位(PNG24):另存为PNG24,注意保持透明度
<p>
//This function will proportionally resize image
function resizeImage($CurWidth,$CurHeight,$MaxSize,$DestFolder,$SrcImage,$Quality,$ImageType)
{
//Check Image size is not 0
if($CurWidth <= 0 || $CurHeight <= 0)
{
return false;
}
//Construct a proportional size of new image
$ImageScale = min($MaxSize/$CurWidth, $MaxSize/$CurHeight);
$NewWidth = ceil($ImageScale*$CurWidth);
$NewHeight = ceil($ImageScale*$CurHeight);
$NewCanves = imagecreatetruecolor($NewWidth, $NewHeight);
// Resize Image
if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight))
{
switch(strtolower($ImageType))
{
case 'image/png':
imagepng($NewCanves,$DestFolder);
break;
case 'image/gif':
imagegif($NewCanves,$DestFolder);
break;
case 'image/jpeg':
case 'image/pjpeg':
imagejpeg($NewCanves,$DestFolder,$Quality);
break;
default:
return false;
}
//Destroy image, frees memory
if(is_resource($NewCanves)) {imagedestroy($NewCanves);}
return true;
}
}
</p>
//此函数将按比例调整图像大小
函数resizeImage($CurWidth、$CurHeight、$MaxSize、$DestFolder、$SrcImage、$Quality、$ImageType)
{
//检查图像大小是否为0
如果($CurWidth关于imagemagick
?imagemagick的性能优于PHP GD。为什么GD会是这样呢?好主意John。虽然我正在尝试优化它以将图像存储在数据库中。我知道,这不是最好的主意,但需求是这样说的。@Michael J.V.-对不起,你是对的。我认为GD和imagemagick是一个很好的选择,重点是t我忘了做的是OP有一大堆工作要做,并且给出了流程提示。我从来没有碰过任何类型的库,因为这往往是目的驱动的东西,而库从来没有真正做过你想让它们做的事情。@santiagobasaulto-如果你想把图像保存在数据库中,好(有点),但通过使用类似于我上面描述的高速缓存系统,您将解决此类存储的并发问题。也就是说,直到您意识到,如果以后需要扩展存储,它将给您带来麻烦。:)