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 相关文章推荐
3.从实例开始
Oct 09 PHP
php中文本数据翻页(留言本翻页)
Oct 09 PHP
PHP面向对象的使用教程 简单数据库连接
Nov 25 PHP
PHP 数组基础知识小结
Aug 20 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
PHP加密解密函数详解
Oct 28 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 PHP
php实现将数据做成json的格式给前端使用
Aug 21 PHP
PHP示例演示发送邮件给某个邮箱
Apr 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
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
jcrop基本参数一览
2013/07/16 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
jQuery中insertAfter()方法用法实例
2015/01/08 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
Jquery实现纵向横向菜单
2016/01/24 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
Vue数字输入框组件使用方法详解
2020/02/10 Javascript
[03:42]2014DOTA2西雅图国际邀请赛7月9日TOPPLAY
2014/07/09 DOTA
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
对于Python装饰器使用的一些建议
2015/06/03 Python
开源Web应用框架Django图文教程
2017/03/09 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
bluepy 一款python封装的BLE利器简单介绍
2019/06/25 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
应届毕业生求职信范文
2013/12/18 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
催款函范本大全
2015/06/24 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS