PHP实现对png图像进行缩放的方法(支持透明背景)


Posted in PHP onJuly 15, 2015

本文实例讲述了PHP实现对png图像进行缩放的方法。分享给大家供大家参考。具体实现方法如下:

function smart_resize_image( $file, $width = 0, $height = 0, $proportional = false, $output = 'file', $delete_original = true, $use_linux_commands = false )
{
    if ( $height <= 0 && $width <= 0 ) {
      return false;
    }
    $info = getimagesize($file);
    $image = '';
    $final_width = 0;
    $final_height = 0;
    list($width_old, $height_old) = $info;
    if ($proportional) {
      if ($width == 0) $factor = $height/$height_old;
      elseif ($height == 0) $factor = $width/$width_old;
      else $factor = min ( $width / $width_old, $height / $height_old); 
      $final_width = round ($width_old * $factor);
      $final_height = round ($height_old * $factor);
    }
    else {    
      $final_width = ( $width <= 0 ) ? $width_old : $width;
      $final_height = ( $height <= 0 ) ? $height_old : $height;
    }
    switch ($info[2] ) {
      case IMAGETYPE_GIF:
        $image = imagecreatefromgif($file);
      break;
      case IMAGETYPE_JPEG:
        $image = imagecreatefromjpeg($file);
      break;
      case IMAGETYPE_PNG:
        $image = imagecreatefrompng($file);
      break;
      default:
        return false;
    }
    $image_resized = imagecreatetruecolor( $final_width, $final_height );
    if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) {
      $trnprt_indx = imagecolortransparent($image);
      // If we have a specific transparent color
      if ($trnprt_indx >= 0) {
        // Get the original image's transparent color's RGB values
        $trnprt_color  = imagecolorsforindex($image, $trnprt_indx);
        // Allocate the same color in the new image resource
        $trnprt_indx  = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
        // Completely fill the background of the new image with allocated color.
        imagefill($image_resized, 0, 0, $trnprt_indx);
        // Set the background color for new image to transparent
        imagecolortransparent($image_resized, $trnprt_indx);
      }
      // Always make a transparent background color for PNGs that don't have one allocated already
      elseif ($info[2] == IMAGETYPE_PNG) {
        // Turn off transparency blending (temporarily)
        imagealphablending($image_resized, false);
        // Create a new transparent color for image
        $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);
        // Completely fill the background of the new image with allocated color.
        imagefill($image_resized, 0, 0, $color);
        // Restore transparency blending
        imagesavealpha($image_resized, true);
      }
    }
    imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);
    if ( $delete_original ) {
      if ( $use_linux_commands )
        exec('rm '.$file);
      else
        @unlink($file);
    }
    switch ( strtolower($output) ) {
      case 'browser':
        $mime = image_type_to_mime_type($info[2]);
        header("Content-type: $mime");
        $output = NULL;
      break;
      case 'file':
        $output = $file;
      break;
      case 'return':
        return $image_resized;
      break;
      default:
      break;
    }
    switch ($info[2] ) {
      case IMAGETYPE_GIF:
        imagegif($image_resized, $output);
      break;
      case IMAGETYPE_JPEG:
        imagejpeg($image_resized, $output);
      break;
      case IMAGETYPE_PNG:
        imagepng($image_resized, $output);
      break;
      default:
        return false;
    }
    return true;
}

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
使用PHP和XSL stylesheets转换XML文档
Oct 09 PHP
十天学会php之第九天
Oct 09 PHP
基于mysql的论坛(2)
Oct 09 PHP
phpmyadmin 访问被拒绝的真实原因
Jun 15 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
浅析php中如何在有限的内存中读取大文件
Jul 02 PHP
php之curl设置超时实例
Nov 03 PHP
php微信公众开发之获取周边酒店信息的方法
Dec 22 PHP
修改WordPress中文章编辑器的样式的方法详解
Dec 15 PHP
php+resumablejs实现的分块上传 断点续传功能示例
Apr 18 PHP
safari下载文件自动加了html后缀问题
Nov 09 PHP
PHP7 echo和print语句实例用法
Feb 15 PHP
php实现网页缓存的工具类分享
Jul 14 #PHP
浅谈php错误提示及查错方法
Jul 14 #PHP
浅谈php的优缺点
Jul 14 #PHP
使用URL传输SESSION信息
Jul 14 #PHP
利用“多说”制作留言板、评论系统
Jul 14 #PHP
php生成数字字母的验证码图片
Jul 14 #PHP
php算法实例分享
Jul 14 #PHP
You might like
模拟flock实现文件锁定
2007/02/14 PHP
dedecms系统常用术语汇总
2007/04/03 PHP
php的urlencode()URL编码函数浅析
2011/08/09 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
linux下php上传文件注意事项
2016/06/11 PHP
PHP基于回溯算法解决n皇后问题的方法示例
2017/11/07 PHP
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
2019/12/06 Javascript
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
python字符串编码识别模块chardet简单应用
2015/06/15 Python
Python面向对象特殊成员
2017/04/24 Python
import的本质解析
2017/10/30 Python
python中int与str互转方法
2018/07/02 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
QA工程师岗位职责
2013/11/20 职场文书
应聘医药销售自荐书范文
2014/02/08 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
领导干部作风建设总结
2014/10/23 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android