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 相关文章推荐
PHP4(windows版本)中的COM函数
Oct 09 PHP
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
php5.3不能连接mssql数据库的解决方法
Dec 27 PHP
使用php转义输出HTML到JavaScript
Mar 27 PHP
php生成rss类用法实例
Apr 14 PHP
PHP多态代码实例
Jun 26 PHP
thinkPHP中volist标签用法示例
Dec 06 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
PHP实现生成推广海报的方法详解
Mar 14 PHP
phpstorm 配置xdebug的示例代码
Mar 31 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 PHP
php 多继承的几种常见实现方法示例
Nov 18 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开发中的安全防范知识详解
2013/06/06 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
利用Electron简单撸一个Markdown编辑器的方法
2019/06/10 Javascript
python缩进区别分析
2014/02/15 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
世界上最大的在线旅行社新加坡网站:Expedia新加坡
2016/08/25 全球购物
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
什么是继承
2013/12/07 面试题
网站设计师的岗位职责
2013/11/21 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
房屋维修申请报告
2015/05/18 职场文书
大学运动会通讯稿
2015/07/18 职场文书
2015年征兵工作总结
2015/07/23 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python