我有一个网站,用户可以保存他们的个人资料图片(头像)。
我想在加载图像时对图像进行一些优化。
我的意思是,它是一个头像,不需要全分辨率,也不需要很大的尺寸。
我该怎么办?我一直在想:
可能的:
有一些库比GD更好(更简单)吗?
非常感谢!
答案 0 :(得分:2)
GD就是这样做的。这听起来像一个简单的操作,但是如果你要这样做,你真的想要做出许多因素。总而言之,这需要数百行代码来处理所有事情。
我的建议是,尽管您可能希望调整图像大小(如果使用JPEG需要进行有损的重新压缩),将其转换为GIF是一个坏主意。你不知道源类型是什么,所以这样做是有问题的。
这是我推荐的流程:
1)将图像大小调整为输出格式。如果需要,您也可以在此处强制裁剪宽高比。
2)确定原始来源模式:
请注意,这个解决方案几乎会破坏任何“动画”的GIF,但是...当你尝试调整动画gif的大小时会发生这种情况。
虽然......我也强烈建议不要将其作为单个阶段进程并删除原始文件。这种东西只会在以后再次咬你。
目前磁盘空间很便宜......以高质量格式(即使是2K x 2K分辨率)存储原件要好得多,然后创建一个图像服务,它将提供您所需的分辨率/质量并缓存结果
答案 1 :(得分:1)
您可以使用Asido imaging library for PHP调整图片大小。这个库虽然使用了GD。这是一些example usage code。
调整大小和其他成像操作最好在上传新图像后进行(除非您想为其他目的保存更高的分辨率)。
答案 2 :(得分:0)
我会为您的网页选择一些标准的头像图片尺寸,例如
当用户上传新的头像时,您可以使用合理的质量设置将其转换为您需要的格式。我假设你要使用JPEG,因为这是这个用例的一个很好的全能格式。 PNG在摄影内容方面表现不佳,但JPEG对于绘图并不是很好,但是你看到的大多数头像都是照片。这些天我不再使用GIF了,它们限制为256种颜色并且只有1位alpha通道。
答案 3 :(得分:0)
<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>