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 为:";

echo"


";

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

}

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

报错: 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

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

  1. php 二维数组排序函数,php自定义二维数组排序函数array

    这次给大家带来php自定义二维数组排序函数array,php自定义二维数组排序函数array的注意事项有哪些,下面就是实战案例,一起来看一下. 这篇文章主要介绍了php自定义二维数组排序函数array ...

  2. python imread函数_opencv学习之读取图像-imread函数

    序 想要完整全面地学习opencv,仅凭阅读samples的示例源码是不够的.毕竟opencv是一个拥有非常多函数的程序库,所以在每学习一个函数时,芒果觉得有必要记录下来,分享给有需要的同学.于是,就 ...

  3. R语言可视化、编写自定义函数可视化水平排序条形图(horizontal bar plot)、自定义图像布局模仿经济学人杂志可视化效果、右侧添加标签数值图像方框、自定义背景色、水平条形图中间线条等

    R语言可视化.编写自定义函数可视化水平排序条形图(horizontal bar plot).自定义图像布局模仿经济学人杂志可视化效果.右侧添加标签数值图像方框.自定义背景色.水平条形图中间线条.网格线 ...

  4. python使用openCV图像加载(转化为灰度图像)、使用filter2D函数对图像进行锐化(Sharpen Images)

    python使用openCV图像加载(转化为灰度图像).使用filter2D函数对图像进行锐化(Sharpen Images) 目录

  5. R语言使用magick包的image_border函数和image_background函数自定义图像的边界和背景(Change image border and background)

    R语言使用magick包的image_border函数和image_background函数自定义图像的边界和背景(Change image border and background) 目录

  6. seaborn使用axes_dict函数获取displot函数生成的图像所有标题信息、使用set_title函数自定义设置多面板直方图标题(Multi-panel histogram‘s title)

    seaborn使用axes_dict函数获取displot函数生成的图像所有标题信息.使用set_title函数自定义设置多面板直方图标题(Multi-panel histogram's title) ...

  7. R语言scale_colour_brewer()函数和scale_fill_brewer()函数调色板及填充ggplot2图像实战

    R语言scale_colour_brewer()函数和scale_fill_brewer()函数调色板及填充ggplot2图像实战 目录 R语言scale_colour_brewer()函数和scal ...

  8. 【OpenCV】OpenCV函数精讲之 -- 多通道图像混合

    #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <ios ...

  9. 【OpenCV】OpenCV函数精讲之 -- 初级图像混合

    本文是将设置感兴趣区域ROI和使用addWeighted函数进行图像线性混合结合起来使用,下边是具体的代码示例: #include <opencv2/core/core.hpp> #inc ...

  10. Python使用turtle绘制函数y=9-x^2的图像

    turtle是Python自带的绘图模块,可以轻松完成很多图形的绘制,启动IDLE之后,单击菜单"help"==>"Turtle Demo"可以查看自带的 ...

最新文章

  1. Hadoop ssh配置设置
  2. 你为何要带着我的爱远走
  3. 使用网真和WAD热部署Kubernetes
  4. JMETER SLAVE和MASTER 分布式启动压测
  5. 标准C程序设计七---03
  6. html 页面加载完成后执行,js中页面加载完成后执行的几种方法及执行顺序
  7. 思科ASA防火墙端口映射
  8. “酒香也怕巷子深” Smartflow-Sharp 工作流
  9. 阿里云域名配置以及https证书(ssl证书)配置
  10. 张正友相机标定Opencv实现程序(ubuntu下)
  11. python dict get 怎么实现的_关于python:dict.get()方法返回一个指针
  12. 数据库 | Mysql - [索引]
  13. 计算机毕业论文怎样写系统的意义,毕业论文写作的目的意义及步骤-计算机论文...
  14. 基于微信小程序的水果销售商城的设计与实现
  15. 安装Windows11需要满足哪些要求
  16. DOS命令:cd显示当前目录名或改变当前目录
  17. 百度云盘服务器升级,从云储存工具升级为云操作系统,百度网盘将成为百度5G物联入口...
  18. 众昂矿业:萤石与医药
  19. Ubuntu 设置 虚拟分辨率
  20. linux堡垒机开源软件,开源堡垒机-01-JumpServer的安装

热门文章

  1. 干货 | 高效阅读英文文献你必须知道的技巧
  2. 如何用简单易懂的例子解释隐马尔可夫模型?(入门篇)
  3. 情人节,我用字符画出了一个对象!
  4. 【每日算法Day 74】经典面试题:约瑟夫环,我敢打赌你一定不会最后一种方法!...
  5. 百面机器学习—13.L1正则化与稀疏性
  6. LeetCode刷题——279. 完全平方数
  7. Looper中的消息队列处理机制
  8. Ext JS+Android+SSH整合开发Web与移动SNS
  9. 末日帝国——Agile公司的困境 (4)
  10. mysql加服务器命令_mysql服务器常用命令