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文件是否有语法错误的方法
Dec 23 PHP
PHP异步调用socket实现代码
Jan 12 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
Jun 24 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
Sep 16 PHP
php开启openssl的方法
May 15 PHP
php实现refresh刷新页面批量导入数据的方法
Dec 23 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
Yii2超好用的日期和时间组件(值得收藏)
May 05 PHP
php中array_slice和array_splice函数解析
Oct 18 PHP
PHP实现根据数组的值进行分组的方法
Apr 20 PHP
PHP使用Redis实现防止大并发下二次写入的方法
Oct 09 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
Nov 03 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
人大复印资料处理程序_输入篇
2006/10/09 PHP
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
php+mysql实现无限级分类
2015/11/11 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
sails框架的学习指南
2014/12/22 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
Python采用raw_input读取输入值的方法
2014/08/18 Python
python实现按长宽比缩放图片
2018/06/07 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
行政工作个人的自我评价
2014/02/13 职场文书
资金主管岗位职责范本
2014/03/04 职场文书
高中学校对照检查材料
2014/08/31 职场文书
先进党员事迹材料
2014/12/24 职场文书
匿名信格式范文
2015/05/27 职场文书
护士工作心得体会
2016/01/25 职场文书
入团申请书格式
2019/06/20 职场文书