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 相关文章推荐
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
PHP三层结构(上) 简单三层结构
Jul 04 PHP
PHP遍历数组的几种方法
Mar 22 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
Apr 23 PHP
在yii中新增一个用户验证的方法详解
Jun 20 PHP
php操作XML、读取数据和写入数据的实现代码
Aug 15 PHP
php计算整个目录大小的方法
Jun 01 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
使用php完成常见的文件上传功能(推荐)
Jan 13 PHP
详解提高使用Java反射的效率方法
Apr 29 PHP
PHP使用HTML5 FormData对象提交表单操作示例
Jul 02 PHP
数据结构之利用PHP实现二分搜索树
Oct 25 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中递归的实现实例详解
2017/11/14 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python处理Excel文件实例代码
2017/06/20 Python
Windows系统下PhantomJS的安装和基本用法
2018/10/21 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
django实现支付宝支付实例讲解
2019/10/17 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
python爬虫如何解决图片验证码
2021/02/14 Python
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
介绍一下Java中的static关键字
2012/05/12 面试题
信息服务专业毕业生求职信
2014/03/02 职场文书
瘦西湖导游词
2015/02/03 职场文书
2015初中团委工作总结
2015/07/28 职场文书
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android
使用Java去实现超市会员管理系统
2022/03/18 Java/Android