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 相关文章推荐
xml+php动态载入与分页
Oct 09 PHP
基于文本的访客签到簿
Oct 09 PHP
利用 window_onload 实现select默认选择
Oct 09 PHP
java EJB 加密与解密原理的一个例子
Jan 11 PHP
php 分页原理详解
Aug 21 PHP
PHP-redis中文文档介绍
Feb 07 PHP
浅谈PHP Cookie处理函数
Jun 10 PHP
thinkPHP中U方法加密传递参数功能示例
May 29 PHP
php获取用户真实IP和防刷机制的实例代码
Nov 28 PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 03 PHP
PHP7 windows支持
Mar 09 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翻页类
2009/06/01 PHP
解析php中memcache的应用
2013/06/18 PHP
ThinkPHP控制器详解
2015/07/27 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
判断对象是否Window的实现代码
2012/01/10 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
2018/12/05 jQuery
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
[00:14]护身甲盾
2019/03/06 DOTA
Python set集合类型操作总结
2014/11/07 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
python使用folium库绘制地图点击框
2018/09/21 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
怎么样写好简历中的自我评价
2013/10/25 职场文书
企业管理培训感言
2014/01/27 职场文书
勤俭节约倡议书
2014/04/14 职场文书
运动会口号8字
2014/06/07 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
学校施工安全责任书
2015/01/29 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
js中Object.create实例用法详解
2021/10/05 Javascript
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle