php 图像居中裁剪函数,PHP 实现的自定义图像居中裁剪函数示例

PHP 实现的自定义图像居中裁剪函数示例

图像居中裁减的大致思路:

1. 首先将图像进行缩放, 使得缩放后的图像能够恰好覆盖裁减区域.(imagecopyresampled 重采样拷贝部分图像并调整大小)

2. 将缩放后的图像放置在裁减区域中间.(imagecopy 拷贝图像的一部分)

3. 裁减图像并保存.(imagejpeg | imagepng | imagegif 输出图象到浏览器或文件)

具体代码:<?php

//================== 缩放裁剪函数 ====================

/**

* 居中裁剪图片

* @param string $source [原图路径]

* @param int $width [设置宽度]

* @param int $height [设置高度]

* @param string $target [目标路径]

* @return bool [裁剪结果]

*/

functionimage_center_crop($source,$width,$height,$target)

{

if(!file_exists($source))returnfalse;

/* 根据类型载入图像 */

switch(exif_imagetype($source)){

caseIMAGETYPE_JPEG:

$image=imagecreatefromjpeg($source);

break;

caseIMAGETYPE_PNG:

$image=imagecreatefrompng($source);

break;

caseIMAGETYPE_GIF:

$image=imagecreatefromgif($source);

break;

}

if(!isset($image))returnfalse;

/* 获取图像尺寸信息 */

$target_w=$width;

$target_h=$height;

$source_w=imagesx($image);

$source_h=imagesy($image);

/* 计算裁剪宽度和高度 */

$judge=(($source_w/$source_h)>($target_w/$target_h));

$resize_w=$judge?($source_w*$target_h)/$source_h:$target_w;

$resize_h=!$judge?($source_h*$target_w)/$source_w:$target_h;

$start_x=$judge?($resize_w-$target_w)/2:0;

$start_y=!$judge?($resize_h-$target_h)/2:0;

/* 绘制居中缩放图像 */

$resize_img=imagecreatetruecolor($resize_w,$resize_h);

imagecopyresampled($resize_img,$image,0,0,0,0,$resize_w,$resize_h,$source_w,$source_h);

$target_img=imagecreatetruecolor($target_w,$target_h);

imagecopy($target_img,$resize_img,0,0,$start_x,$start_y,$resize_w,$resize_h);

/* 将图片保存至文件 */

if(!file_exists(dirname($target)))mkdir(dirname($target),0777,true);

switch(exif_imagetype($source)){

caseIMAGETYPE_JPEG:

imagejpeg($target_img,$target);

break;

caseIMAGETYPE_PNG:

imagepng($target_img,$target);

break;

caseIMAGETYPE_GIF:

imagegif($target_img,$target);

break;

}

// return boolval(file_exists($target));//PHP5.5 以上可用 boolval() 函数获取返回的布尔值

returnfile_exists($target)?true:false;// 兼容低版本 PHP 写法

}

//================== 函数使用方式 ====================

// 原始图片的路径

$source='photoClip.jpg';

$width=480;// 裁剪后的宽度

$height=480;// 裁剪后的高度

// 裁剪后的图片存放目录

$target='dd111.jpg';

// 裁剪后保存到目标文件夹

if(image_center_crop($source,$width,$height,$target)){

echo"原图 1440*900 为:%24source";

echo"


";

echo"修改后图片 480*480 为:%24target";

}

附: 代码测试中遇到的问题

报错: call an undefined function exif_imagetype()

解决方法:

打开扩展

extension=php_exif.dll

并将

extension=php_mbstring.dll

, 放到

extension=php_exif.dll

前边

另: boolval() 函数为 PHP5.5 版本以上才能使用的函数, 本文测试代码中为兼容低版本, 使用如下语句代替

return file_exists($target)?true:false;

来源: http://www.bubuko.com/infodetail-2555896.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值