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 相关文章推荐
把从SQL中取出的数据转化成XMl格式
Oct 09 PHP
php读取msn上的用户信息类
Dec 05 PHP
windows下开发并编译PHP扩展的方法
Mar 18 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
Jul 03 PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
Jul 04 PHP
如何让thinkphp在模型中自动完成session赋值小教程
Sep 05 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 PHP
PHP获取真实客户端的真实IP
Mar 07 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 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 __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
JavaScript基本编码模式小结
2012/05/23 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
python五子棋游戏的设计与实现
2019/06/18 Python
详解Python IO编程
2020/07/24 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
Python日志器使用方法及原理解析
2020/09/27 Python
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
介绍下java.util.Arrays类
2012/10/16 面试题
农药学硕士毕业生自荐信
2013/09/25 职场文书
电厂厂长岗位职责
2014/01/02 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
小学班主任评语
2014/12/29 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
小学运动会开幕词
2016/03/04 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
Python机器学习三大件之一numpy
2021/05/10 Python
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技