php Imagick 实现等比缩放图片
网站本来是用GD实现的等比图片的缩放,后来在网上发现Imagick比GD更好一些所以重写了一个方法是用Imagick来实现图片的等比缩放!代码如下:
- /**
- * 使用imagick 等比缩放图片
- * @param string $source_img 源图片地址
- * @param string $target_img 缩放后图片地址
- * @param int $with 缩放后图片宽度
- * @param int $height 缩放后图片高度
- */
- public function imagick($source_img,$target_img,$with,$height){
- if(is_file($source_img)){ //判断源图片是否存在
- $im = new Imagick();
- }else{
- exit;
- }
- $result = $im->readImage($source_img);
- $srcWH = $im->getImageGeometry(); //获取源图片宽和高
- //图片等比例缩放宽和高设置 ,根据宽度设置等比缩放
- if($srcWH['width']>$with){
- $srcW['width'] = $with;
- $srcH['height'] = $srcW['width']/$srcWH['width']*$srcWH['height'];
- }else{
- $srcW['width'] = $srcWH['width'];
- $srcH['height'] = $srcWH['height'];
- }
- //按照比例进行缩放
- $im->thumbnailImage( $srcW['width'], $srcH['height'], true );
- // 按照缩略图大小创建一个有颜色的图片
- $new_img= new Imagick();
- $new_img->newImage( $srcW['width'], $srcH['height'], 'white', 'jpg' ); //pink,black
- //合并图片
- $new_img->compositeImage( $im, imagick::COMPOSITE_OVER, 0, 0);
- //生成图片
- $new_img->setImageFileName($target_img);
- $new_img->writeImage();
- //输出图片
- header( "Content-Type: image/jpg" );
- echo $new_img;
- }
- }