PHP高保真图片缩放处理

在一些有较多图片的网站,为了加速响应和优化储存,上传图片时一般会做图片大小格式化的处理 .
在PHP中有两种处理方法,一种是用 gd2 ,一种是用 imagick , 这两种方法都要求打开相应的扩展模块.
具体实现如下:

1.gb2
/**
* 图片大小的格式化,使之成为固定大小的文件图片
* @param string $srcImage 原图片的路径信息
* @param int $width 指定图片格式化后的宽度(图片高度按照宽度缩放比率,自适应)
* @param string $fileDir 生成的文件的存放目录 如 /test/images/
* @return bool
*/
public function imageSizeFormate($srcImage,$width,$fileDir)
{
// 获得原图片尺寸
$srcSize = getimagesize($srcImage);
/* 对于超出大小或尺寸限制的文件进行缩放处理 */
if ($srcSize[0] > $width)
{
/* 按照图片宽度,计算等比例缩放的图片高度*/
$height = ($width/$srcSize[0])*$srcSize[1];
/* 创建真彩色的临时文件,指定大小 */
$tmpImage = imagecreatetruecolor($width,$height);
// 原图片的资源
$srcImageSource = imagecreatefromjpeg($srcImage);
// 重新采样拷贝图像并调整大小
imagecopyresampled($tmpImage,$srcImageSource,0,0,0,0,
$width,$height,$srcSize[0],$srcSize[1]);
/* 生成 JPEG 格式的新文件,存放在test目录下 */
// 以时间戳作为文件名
$fileName = mktime();
$dstPath = realpath(“.”).$fileDir.$fileName.”.jpg”;
if( imagejpeg($tmpImage,$dstPath) )
{
/* 最后删除原文件 */
return unlink($srcImage);
}
return false;
}
}

2.imagick
/**
* 图片大小的格式化,
* @param string $srcImage 原图片的路径信息
* @param int $width 指定图片格式化后的宽度(图片高度按照宽度缩放比率,自适应)
* @param string $fileDir 缩放后的文件存放路径
* @param string $type 图片格式化类型,默认为 jpg 格式
* @param string $bestFit 是否强制调整大小以获取最佳效果
* @return bool
*/
public function imageSizeFormate($srcImage,$width,$fileDir,$type =’jpg’,$bestFit=true)
{
// 获得原图片尺寸
$srcSize = getimagesize($srcImage);
/* 对于超出大小或尺寸限制的文件进行缩放处理 */
if($srcSize[0] > $width)
{
//图片的自适应宽度
$height = ($width/$srcSize[0])*$srcSize[1];
$imageick = new Imagick ($srcImage);
/* 缩略图大小设置 */
$imageick->thumbnailImage($width,$height,$bestFit);
/* 缩略图的格式化类型 */
$imageick->setImageFormat ($type);
// 用时间戳作为生成文件的文件名
$fileName = mktime();
$file = realpath(“.”).$fileDir.$fileName.”.”.$type;
//生成图片
if( $imagick->writeImage($file) )
{
//删除原来的图片
return unlink($srcImage);
}
return false;
}
}

PHP高保真图片缩放处理》上有 2 条评论

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>