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 为:";
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 实现的自定义图像居中裁剪函数示例相关推荐
- php 二维数组排序函数,php自定义二维数组排序函数array
这次给大家带来php自定义二维数组排序函数array,php自定义二维数组排序函数array的注意事项有哪些,下面就是实战案例,一起来看一下. 这篇文章主要介绍了php自定义二维数组排序函数array ...
- python imread函数_opencv学习之读取图像-imread函数
序 想要完整全面地学习opencv,仅凭阅读samples的示例源码是不够的.毕竟opencv是一个拥有非常多函数的程序库,所以在每学习一个函数时,芒果觉得有必要记录下来,分享给有需要的同学.于是,就 ...
- R语言可视化、编写自定义函数可视化水平排序条形图(horizontal bar plot)、自定义图像布局模仿经济学人杂志可视化效果、右侧添加标签数值图像方框、自定义背景色、水平条形图中间线条等
R语言可视化.编写自定义函数可视化水平排序条形图(horizontal bar plot).自定义图像布局模仿经济学人杂志可视化效果.右侧添加标签数值图像方框.自定义背景色.水平条形图中间线条.网格线 ...
- python使用openCV图像加载(转化为灰度图像)、使用filter2D函数对图像进行锐化(Sharpen Images)
python使用openCV图像加载(转化为灰度图像).使用filter2D函数对图像进行锐化(Sharpen Images) 目录
- R语言使用magick包的image_border函数和image_background函数自定义图像的边界和背景(Change image border and background)
R语言使用magick包的image_border函数和image_background函数自定义图像的边界和背景(Change image border and background) 目录
- seaborn使用axes_dict函数获取displot函数生成的图像所有标题信息、使用set_title函数自定义设置多面板直方图标题(Multi-panel histogram‘s title)
seaborn使用axes_dict函数获取displot函数生成的图像所有标题信息.使用set_title函数自定义设置多面板直方图标题(Multi-panel histogram's title) ...
- R语言scale_colour_brewer()函数和scale_fill_brewer()函数调色板及填充ggplot2图像实战
R语言scale_colour_brewer()函数和scale_fill_brewer()函数调色板及填充ggplot2图像实战 目录 R语言scale_colour_brewer()函数和scal ...
- 【OpenCV】OpenCV函数精讲之 -- 多通道图像混合
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <ios ...
- 【OpenCV】OpenCV函数精讲之 -- 初级图像混合
本文是将设置感兴趣区域ROI和使用addWeighted函数进行图像线性混合结合起来使用,下边是具体的代码示例: #include <opencv2/core/core.hpp> #inc ...
- Python使用turtle绘制函数y=9-x^2的图像
turtle是Python自带的绘图模块,可以轻松完成很多图形的绘制,启动IDLE之后,单击菜单"help"==>"Turtle Demo"可以查看自带的 ...
最新文章
- Hadoop ssh配置设置
- 你为何要带着我的爱远走
- 使用网真和WAD热部署Kubernetes
- JMETER SLAVE和MASTER 分布式启动压测
- 标准C程序设计七---03
- html 页面加载完成后执行,js中页面加载完成后执行的几种方法及执行顺序
- 思科ASA防火墙端口映射
- “酒香也怕巷子深” Smartflow-Sharp 工作流
- 阿里云域名配置以及https证书(ssl证书)配置
- 张正友相机标定Opencv实现程序(ubuntu下)
- python dict get 怎么实现的_关于python:dict.get()方法返回一个指针
- 数据库 | Mysql - [索引]
- 计算机毕业论文怎样写系统的意义,毕业论文写作的目的意义及步骤-计算机论文...
- 基于微信小程序的水果销售商城的设计与实现
- 安装Windows11需要满足哪些要求
- DOS命令:cd显示当前目录名或改变当前目录
- 百度云盘服务器升级,从云储存工具升级为云操作系统,百度网盘将成为百度5G物联入口...
- 众昂矿业:萤石与医药
- Ubuntu 设置 虚拟分辨率
- linux堡垒机开源软件,开源堡垒机-01-JumpServer的安装
热门文章
- 干货 | 高效阅读英文文献你必须知道的技巧
- 如何用简单易懂的例子解释隐马尔可夫模型?(入门篇)
- 情人节,我用字符画出了一个对象!
- 【每日算法Day 74】经典面试题:约瑟夫环,我敢打赌你一定不会最后一种方法!...
- 百面机器学习—13.L1正则化与稀疏性
- LeetCode刷题——279. 完全平方数
- Looper中的消息队列处理机制
- Ext JS+Android+SSH整合开发Web与移动SNS
- 末日帝国——Agile公司的困境 (4)
- mysql加服务器命令_mysql服务器常用命令