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重新实现PHP脚本引擎内置函数
Mar 06 PHP
隐性调用php程序的方法
Mar 09 PHP
PHP原理之异常机制深入分析
Aug 08 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
对PHP新手的一些建议(PHP学习经验总结)
Aug 20 PHP
php实现RSA加密类实例
Mar 26 PHP
详谈PHP编码转换问题
Jul 28 PHP
WordPress中自定义后台管理界面配色方案的小技巧
Dec 29 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
Jul 04 PHP
php上传后台无法收到数据解决方法
Oct 28 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 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
使用cookie实现统计访问者登陆次数
2013/06/08 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
javascript中&quot;/&quot;运算符常见错误
2010/10/13 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
原生js和jquery实现图片轮播特效
2015/04/23 Javascript
jquery结婚电子请柬特效源码分享
2015/08/21 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
python实现图片压缩代码实例
2019/08/12 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
就业自我评价
2014/02/04 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
微信小程序实现拍照和相册选取图片
2021/05/09 Javascript
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
MySQL为id选择合适的数据类型
2021/06/07 MySQL
Java设计模式中的命令模式
2022/04/28 Java/Android
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android