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 相关文章推荐
我的论坛源代码(七)
Oct 09 PHP
php学习 函数 课件
Jun 15 PHP
php adodb分页实现代码
Mar 19 PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
php实现图片局部打马赛克的方法
Feb 11 PHP
PHP邮件群发机实现代码
Feb 16 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
PHP获取文本框、密码域、按钮的值实例代码
Apr 19 PHP
Yii框架实现记录日志到自定义文件的方法
May 23 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 17 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中eclipse 用空格替换 tab键
2013/06/24 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
php 可变函数使用小结
2018/06/12 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
Jquery插件分享之气泡形提示控件grumble.js
2014/05/20 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
2017/04/11 jQuery
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
Python 使用os.remove删除文件夹时报错的解决方法
2017/01/13 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
西班牙在线光学:Visual-Click
2020/06/22 全球购物
体育教育个人自荐信范文
2013/12/01 职场文书
写给女朋友的道歉信
2014/01/12 职场文书
护士个人自我鉴定
2014/03/24 职场文书
2014年教师节寄语
2014/08/11 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
迁户口计划生育证明
2014/10/19 职场文书
会计专业求职信范文
2015/03/19 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
MYSQL 表的全面总结
2021/11/11 MySQL