PHP简单实现图片格式转换(jpg转png,gif转png等)


Posted in PHP onOctober 30, 2019

需求

开发过程中总会遇到一些需求需要对图片格式进行转换。比如 gif转png,jpg转png

如最近使用某平台的图片文件识别,居然不支持gif格式,那么就需要将gif处理成png等。

依赖

php扩展 gd 和 exif

实现

/**
 * 图片格式转换
 * @param string $image_path 文件路径或url
 * @param string $to_ext 待转格式,支持png,gif,jpeg,wbmp,webp,xbm
 * @param null|string $save_path 存储路径,null则返回二进制内容,string则返回true|false
 * @return boolean|string $save_path是null则返回二进制内容,是string则返回true|false
 * @throws Exception 
 * @author klinson <klinson@163.com>
 */
function transform_image($image_path, $to_ext = 'png', $save_path = null)
{
  if (! in_array($to_ext, ['png', 'gif', 'jpeg', 'wbmp', 'webp', 'xbm'])) {
    throw new \Exception('unsupport transform image to ' . $to_ext);
  }
  switch (exif_imagetype($image_path)) {
    case IMAGETYPE_GIF :
      $img = imagecreatefromgif($image_path);
      break;
    case IMAGETYPE_JPEG :
    case IMAGETYPE_JPEG2000:
      $img = imagecreatefromjpeg($image_path);
      break;
    case IMAGETYPE_PNG:
      $img = imagecreatefrompng($image_path);
      break;
    case IMAGETYPE_BMP:
    case IMAGETYPE_WBMP:
      $img = imagecreatefromwbmp($image_path);
      break;
    case IMAGETYPE_XBM:
      $img = imagecreatefromxbm($image_path);
      break;
    case IMAGETYPE_WEBP: //(从 PHP 7.1.0 开始支持)
      $img = imagecreatefromwebp($image_path);
      break;
    default :
      throw new \Exception('Invalid image type');
  }
  $function = 'image'.$to_ext;
  if ($save_path) {
    return $function($img, $save_path);
  } else {
    $tmp = __DIR__.'/'.uniqid().'.'.$to_ext;
    if ($function($img, $tmp)) {
      $content = file_get_contents($tmp);
      unlink($tmp);
      return $content;
    } else {
      unlink($tmp);
      throw new \Exception('the file '.$tmp.' can not write');
    }
  }
}

使用

// 转换后保存在test.png
transform_image($url, 'png', './test.png');
transform_image($filepath, 'png', './test.png');
// 转换后二进制结果直接返回
transform_image($url, 'png');
transform_image($filepath, 'png');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php 数组的合并、拆分、区别取值函数集
Feb 15 PHP
ajax 的post方法实例(带循环)
Jul 04 PHP
Linux下实现PHP多进程的方法分享
Aug 16 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 PHP
对PHP新手的一些建议(PHP学习经验总结)
Aug 20 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
Dec 01 PHP
php实现简单爬虫的开发
Mar 28 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
Sep 23 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
thinkPHP框架乐观锁和悲观锁实例分析
Oct 30 #PHP
PHP的HTTP客户端Guzzle简单使用方法分析
Oct 30 #PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 #PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
Oct 30 #PHP
微信小程序发送订阅消息的方法(php 为例)
Oct 30 #PHP
php上传后台无法收到数据解决方法
Oct 28 #PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 #PHP
You might like
PHP提取中文首字母
2008/04/09 PHP
php 日期和时间的处理-郑阿奇(续)
2011/07/04 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
js中传递特殊字符(+,&amp;)的方法
2014/01/16 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
js实现放大镜特效
2017/05/18 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
python 标准差计算的实现(std)
2019/07/29 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
广告学专业求职信
2014/06/19 职场文书
安全生产标语大全
2014/10/06 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
民间借贷被告代理词
2015/05/23 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
七年级思品教学反思
2016/02/20 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL