php生成图片缩略图,支持png透明
注:此功能依赖GD2图形库
PHP生成缩略图类
<?php
/*
* desc: Resize Image(png, jpg, gif)
* author: 十年后的卢哥哥(http://www.cnblogs.com/lurenjiashuo/)
* date: 2014.11.13
* base from: http://www.oschina.net/code/snippet_5189_2491
*/
class ResizeImage {
//图片类型
private $type;
//实际宽度
private $width;
//实际高度
private $height;
//改变后的宽度
private $resize_width;
//改变后的高度
private $resize_height;
//是否裁图
private $cut;
//源图象
private $srcimg;
//目标图象地址
private $dstimg;
//临时创建的图象
private $im; function __construct($imgPath, $width, $height, $isCut, $savePath) {
$this->srcimg = $imgPath;
$this->resize_width = $width;
$this->resize_height = $height;
$this->cut = $isCut;
//图片的类型 $this->type = strtolower(substr(strrchr($this->srcimg,"."),1)); //初始化图象
$this->initi_img();
//目标图象地址
$this -> dst_img($savePath);
//--
$this->width = imagesx($this->im);
$this->height = imagesy($this->im);
//生成图象
$this->newimg();
ImageDestroy ($this->im);
} private function newimg() {
//改变后的图象的比例
$resize_ratio = ($this->resize_width)/($this->resize_height);
//实际图象的比例
$ratio = ($this->width)/($this->height);
if($this->cut) {
//裁图
$newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);
if($this->type=="png") {
imagefill($newimg, 0, 0, imagecolorallocatealpha($newimg, 0, 0, 0, 127));
}
if($ratio>=$resize_ratio) {
//高度优先
imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width,$this->resize_height, (($this->height)*$resize_ratio), $this->height);
} else {
//宽度优先
imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, $this->resize_height, $this->width, (($this->width)/$resize_ratio));
}
} else {
//不裁图
if($ratio>=$resize_ratio) {
$newimg = imagecreatetruecolor($this->resize_width,($this->resize_width)/$ratio);
if($this->type=="png") {
imagefill($newimg, 0, 0, imagecolorallocatealpha($newimg, 0, 0, 0, 127));
}
imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, ($this->resize_width)/$ratio, $this->width, $this->height);
} else {
$newimg = imagecreatetruecolor(($this->resize_height)*$ratio,$this->resize_height);
if($this->type=="png") {
imagefill($newimg, 0, 0, imagecolorallocatealpha($newimg, 0, 0, 0, 127));
}
imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, ($this->resize_height)*$ratio, $this->resize_height, $this->width, $this->height);
}
}
if($this->type=="png") {
imagesavealpha($newimg, true);
imagepng ($newimg,$this->dstimg);
} else {
imagejpeg ($newimg,$this->dstimg);
}
} //初始化图象
private function initi_img() {
if($this->type=="jpg") {
$this->im = imagecreatefromjpeg($this->srcimg);
}
if($this->type=="gif") {
$this->im = imagecreatefromgif($this->srcimg);
}
if($this->type=="png") {
$this->im = imagecreatefrompng($this->srcimg);
}
} //图象目标地址
private function dst_img($dstpath) {
$full_length = strlen($this->srcimg); $type_length = strlen($this->type);
$name_length = $full_length-$type_length; $name = substr($this->srcimg,0,$name_length-1);
$this->dstimg = $dstpath;
}
}
?>

使用
使用时,直接调用类的构造函数即可,构造函数如下:
$resizeimage = new resizeimage($imgPath, $width, $height, $isCut, $savePath);
参数
$imgPath:原图片地址
$width:缩略图宽
$height:缩略图高
$isCut:是否裁剪,bool值
$savePath:缩略图地址(可以跟原图片地址相同)
示例
<?php
include "ResizeImage.php"; //jpg
$jpgResize = new ResizeImage("img/test_1920_1200.jpg", 320, 240, false, "img/test_320_240.jpg"); //png
$pngResize = new ResizeImage("img/test_1024_746.png", 320, 240, false, "img/test_320_240.png"); ?>
效果

php生成图片缩略图,支持png透明的更多相关文章
- JAVA生成图片缩略图、JAVA截取图片局部内容
package com.ares.image.test; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; ...
- 使用DD_belatedPNG让IE6支持PNG透明图片
使用DD_belatedPNG让IE6支持PNG透明图片 众所周知IE6不支持透明的PNG图片,而PNG图片在Web设计方面表现力上,具有其它图形格式所达不到的效果,IE6这一致命缺陷极大地限制了We ...
- PHP原生写的生成图片缩略图类
PHP原生写的生成图片缩略图类,本文以京东商品图片为例,分别生成三种不同尺寸的图片.调用方法很简单只要传参数高度和宽度,及新图片的名称. 引入缩略图类 include_once 'ImageResiz ...
- IEPNGFix 解决IE6支持PNG透明问题
IE6本身是支持索引色透明度(PNG8)格式,但不支持真彩色透明度(PNG24)格式. 使用IE PNG Fix 2.0可以完美解决IE6支持PNG透明问题,而且支持背景定位和重复属性. IE PNG ...
- 解析IE, FireFox, Opera 浏览器支持Alpha透明的方法
先请看如下代码: filter:alpha(opacity=50); /* IE */ -moz-opacity:0.5; /* Moz + FF */ op ...
- 通过IE私有滤镜让IE6 7 8支持背景透明,内容不透明效果。
CSS3已经支持背景rgba的rgba透明度,这一方法可以避免元素内容也随背景一起变透明(详情请阅http://www.cssha.com/css3-new-knowledge-student).但是 ...
- C#生成图片缩略图(2种思路)
前言:在日常图片浏览中,如果图片过多,只有一张张的打开图片才能知道图片的内容,显然这样浏览起来非常不便.Windows系统在浏览图片时提供了缩略图的功能,这样大大的方便了浏览者了解每张图片的内容,本实 ...
- PHP 生成图片缩略图函数
<?php /** * 生成缩略图函数(支持图片格式:gif.jpeg.png和bmp) * @author ruxing.li * @param string $src 源图片路径 * @pa ...
- java生成生成图片缩略图
/** * */ package com.fkhwl.fkhserver.core.utils; import java.awt.Image; import java.awt.image.Buffer ...
随机推荐
- ADO 读取 ACCESS
#pragma once #include <vector> // 加入ADO支持库, #import "C:\Program Files\Common Files\System ...
- webdriver杀死浏览器和Chromedriver进程
/** * 执行dos命令 * @param command */ public static void command(String command) { ...
- spark使用02
1.rdd的初始化 1.1 读取文件来初始化rdd(通过sparkContext的textFile方法) 1.1.1 读取本地文件 SparkConf conf = new SparkConf().s ...
- 如何修改Hadoop的默认日志级别,还真是麻烦
鄙人使用的Hadoop版本为2.6.4.Hadoop的默认日志级别为INFO,对于百台以上的集群,如果文件操作频繁的话,NameNode会狂打日志,对性能会有一定的影响. 我们可以通过http://& ...
- ElasticSearch5中文分词(IK)
ElasticSearch安装 官网:https://www.elastic.co 1.ElasticSearch安装 1.1.下载安装公共密钥 rpm --import https://artifa ...
- 微信小程序-提示框
提示框: wx.showToast(OBJECT) 显示消息提示框 OBJECT参数说明: 示例代码: wx.showToast({ title: '成功', icon: 'success', dur ...
- python基础编程
1.if else var1 = 100 if var1: print ("1 - if 表达式条件为 true") print (var1) #为0时,条件不成立 var2 = ...
- php : 自定义分页类
Page.class.php : <?php namespace Tools; class Page { private $total; //数据表中总记录数 private $listRows ...
- Cocos2d-x 核心概念 - 场景(Scene)
场景(Scene):构成游戏的界面 场景类的几种: 展示类场景 选项类场景 游戏场景 场景类继承自Node类
- Android微信智能心跳方案 (转)
原创 2015-08-17 phoenix WeMobileDev 前言:在13年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援.刚到广州的时候,Ray让我和春哥对Line和W ...