您现在的位置是:技术博客 > PHPPHP 图像处理剪裁及拷贝 Lucas2020-12-10 00:08【代码】465人已围观 简介php图像处理是经常会用到的,常规的处理方式,很多框架中自带有,但是有一点需要注意。透明的png图片在剪裁或者拷贝的时候,处理中不注意的情况下,很容易会造成透明度丢失。 ``` // 原图地址 $original_img_url = './image_0.png'; // 获取图像真实后缀 $suffix = getfilesuffix($original_img_url); if($suffix == 'png'){ // 创建一块画布,并从 PNG 文件或 URL 地址载入一副图像,返回图像资源 $original_img = imagecreatefrompng($original_img_url); }else if($suffix == 'jpg'){ // 创建一块画布,并从 PNG 文件或 URL 地址载入一副图像,返回图像资源 $original_img = imagecreatefromjpeg($original_img_url); } // $dominant_color = dominant_color($original_img_url); // Imagick::getImageAlphaChannel(); // var_dump($dominant_color);exit; // 获取原图的宽度 $original_img_width = imagesx($original_img); // 获取原图的高度 $original_img_height = imagesy($original_img); /* 功能一:裁减一张图,Start ,高度$cut_img_height */ // 剪裁的宽度$cut_img_width $cut_img_width = 100; // 剪裁的高度$cut_img_height $cut_img_height = 50; // 创建新图 $cut_img = imagecreatetruecolor($cut_img_width, $cut_img_height); // 分配颜色 + alpha,将颜色填充到新图上,imagecolorallocatealpha第4个参数是透明度,0~127,127为完全透明 $alpha = imagecolorallocatealpha($cut_img, 255, 255, 255, 127); imagefill($cut_img, 0, 0, $alpha); // 执行裁减 imagecopyresampled($cut_img, $original_img, 0, 0, 0, 0, $cut_img_width, $cut_img_height, $original_img_width, $original_img_height); // 保存alpha,注意一定要保存成alpha,否则原有的透明度可能丢失 imagesavealpha($cut_img, true); // 将GD 图像流(image)以 PNG 格式输出到标准输出(通常为浏览器) imagepng($cut_img, './image_1.png'); // 最后释放与 image 关联的内存,注意,这是最后一步,且这一步并非是删除已经输出的剪切了的图片 // imagedestroy($cut_img); /* 裁减一张图,End */ /* 功能二:拷贝剪裁的图片 */ // 拷贝图的宽度$cut_copy_img_width $cut_copy_img_width = 100; // 剪裁的高度$cut_copy_img_height $cut_copy_img_height = 50; // 创建拷贝图 $cut_copy_img = imagecreatetruecolor($cut_copy_img_width, $cut_copy_img_height); // 分配颜色 + alpha,将颜色填充到新图上,imagecolorallocatealpha第4个参数是透明度,0~127,127为完全透明 imagefill($cut_copy_img, 0, 0, imagecolorallocatealpha($cut_copy_img, 255, 255, 255, 127)); // 执行拷贝,注意,此处为完全拷贝,也可以部分拷贝 imagecopy($cut_copy_img, $cut_img, 0, 0, 0, 0, $cut_img_width, $cut_img_height); // 保存alpha,注意一定要保存成alpha,否则原有的透明度可能丢失 imagesavealpha($cut_copy_img, true); // 输出拷贝图,将GD 图像流(image)以 PNG 格式输出到标准输出(通常为浏览器) imagepng($cut_copy_img, './image_1_copy.png'); ``` 获取图像真实后缀函数 ``` function getfilesuffix($name) { $file = fopen($name, "rb"); $bin = fread($file, 2); // 只读2字节 fclose($file); $info = @unpack("C2chars", $bin); $code = intval($info['chars1'] . $info['chars2']); $suffix = "unknow"; if($code == 255216){ $suffix = "jpg"; }elseif($code == 7173){ $suffix = "gif"; }elseif($code == 13780){ $suffix = "png"; }elseif($code == 6677){ $suffix = "bmp"; }elseif($code == 7798){ $suffix = "exe"; }elseif($code == 7784){ $suffix = "midi"; }elseif($code == 8297){ $suffix = "rar"; }elseif($code == 7368){ $suffix = "mp3"; }elseif($code == 0){ $suffix = "mp4"; }elseif($code == 8273){ $suffix = "wav"; } return $suffix; } ``` 提示:关键函数imagecolorallocatealpha,剪裁的时候参数设为127完全透明,防止剪裁后透明背景丢失。如果是非透明背景图片,及时设置的127完全透明,也不会有影响。 转载:感谢您对Lucas个人博客网站平台的认可,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“来源Lucas个人博客”。 很赞哦! ( 0 ) 上一篇:磨人的精度问题 下一篇:Easyswoole(初识篇) 相关文章 高并发库存防控超量 Swoole 基础篇一(初识) Sublime代码格式化 Session与Cookie 点击排行 生活不止眼前的苟且,还有诗和远方 十年一觉电影梦 奥地利基茨比厄尔 禅修治愈身心 自律成就自我 零边际成本社会 Modern PHP 鸟哥的Linux私房菜 本栏推荐 要技术,更要有创意 定时任务 Curl无法发送https请求 Lnmp环境搭建 常用的SQL函数 Windows的cmd指令 ueditor工具栏浮动bug 有趣的js插件 标签云 git laravel swoole javascript vue ajax html css sql linux docker flask django nginx apache thinkphp markdown sublime wechat layui photoshop nodejs mysql windows composer java maven springboot mybatis IDE 猜你喜欢 Swoole 基础篇一(初识) PHP进程管理器 正则的快速上手 Sublime代码格式化 Lnmp环境搭建 高并发库存防控超量 Linux之top命令 常用的SQL函数 站点信息 建站时间:2018-05-01 在线人数:1人 文章统计:263篇 总浏览量:222659次 统计数据:百度统计 个人信息:扫描二维码查看