PHP缩略图类

<?php
//缩略图类
class Thumb{
	public static $thumb_prefix = ‘‘;//缩略图前缀
	public static $thumb_savePath = ‘‘;//缩略图保存路径
	public static $thumb_width = ‘‘;//缩略图宽度
	public static $thumb_height = ‘‘;//缩略图高度

	public static function save($sPath){//保存为缩略图,传入一个实参
		$imgArr = self::getImageInfo($sPath);//获取图片信息
		if (is_array($imgArr)) {
			//将三个静态属性以逗号为分隔拆分为数组,实现多张缩略图的生成
			$thumb_prefix_arr = explode(‘,‘, self::$thumb_prefix);
			$thumb_width_arr = explode(‘,‘, self::$thumb_width);
			$thumb_height_arr = explode(‘,‘, self::$thumb_height);
			$countP = count($thumb_prefix_arr);
			$countW = count($thumb_width_arr);
			$countH = count($thumb_height_arr);
			if ($countP>0 && $countP==$countW && $countW==$countH) {
				//遍历一个数组,生成多张缩略图
				$reArr = array();
				foreach ($thumb_prefix_arr as $key=>$value){
					//生成空白画布并填充颜色
					$image = imagecreatetruecolor($thumb_width_arr[$key], $thumb_height_arr[$key]);
					$color = imagecolorallocate($image, 255, 255, 255);//白色
					imagefill($image, 0, 0, $color);
					//计算出缩略比例
					$width_scale = $imgArr[‘width‘]/$thumb_width_arr[$key];//宽比
					$height_scale = $imgArr["height"]/$thumb_height_arr[$key];//高比
					$scale = $width_scale>$height_scale ? $width_scale : $height_scale;
					//计算缩略图宽高
					$width = $imgArr["width"]/$scale;
					$height = $imgArr["height"]/$scale;
					//到目标图片的位置
					$dst_x = ($thumb_width_arr[$key]-$width)/2;
					$dst_y = ($thumb_height_arr[$key]-$height)/2;
					//获取原始图片资源并拷贝
					$src_image = $imgArr["createFunName"]($sPath);//获取原始图片资源
					imagecopyresized($image, $src_image, $dst_x, $dst_y, 0, 0, $width, $height, $imgArr["width"], $imgArr["height"]);
					//保存并返回值
					$re = $imgArr[‘saveFunName‘]($image,self::$thumb_savePath.‘/‘.$thumb_prefix_arr[$key].$imgArr[‘name‘]);
					$reArr[$key] = $re;
				}
				//销毁缩略图资源及原图片资源,释放内存
				imagedestroy($image);
				imagedestroy($src_image);
				return $reArr;//返回数组
			}else{
				return false;
			}
		}else{
			return false;
		}
	}

	protected static function getImageInfo($path){
		if (is_file($path)) {
			$imgArr = getimagesize($path);
			if (is_array($imgArr)) {//如果$imgArr是一个数组,则说明$path是一个真实图片
				//判断不同的图片类型,使用变量函数,生成图片资源:$createFunName,保存图片资源:$saveFunName
				switch ($imgArr[‘mime‘]){
					case ‘image/jpeg‘:
					case ‘image/pjpeg‘:
						$createFunName = ‘imagecreatefromjpeg‘;
						$saveFunName = ‘imagejpeg‘;
						break;
					case ‘image/png‘:
						$createFunName = ‘imagecreatefrompng‘;
						$saveFunName = ‘imagepng‘;
						break;
					case ‘image/gif‘:
						$createFunName = ‘imagecreatefromgif‘;
						$saveFunName = ‘imagegif‘;
						break;
					default:
						return false;
				}
				//获取原图片名称
				$oldName = pathinfo($path,PATHINFO_BASENAME);
				//返回图片信息数组
				return array(
						‘name‘=>$oldName,
						‘type‘=>$imgArr[‘mime‘],
						‘width‘=>$imgArr[0],
						‘height‘=>$imgArr[1],
						‘createFunName‘=>$createFunName,
						‘saveFunName‘=>$saveFunName
				);
			}
		}else{
			return false;
		}
	}
}
时间: 2024-10-13 00:03:25

PHP缩略图类的相关文章

pdo文字水印类,验证码类,缩略图类,logo类

文字水印类 image.class.php <?php /** * webrx.cn qq:7031633 * @author webrx * @copyright copyright (c) 2003-2014 webrx Inc. (http://www.webrx.cn) * @version 2014-9-7 [email protected] */ class Image { private $f; private $i; private $path; public function

【PHP缩略图类】手机照片不能生成缩略图问题以及解决方案

[本文原创,谢绝转载] 一.出现的问题 这几天做了手机上传照片并裁出缩略图的接口的测试,发现不管怎么,生成的缩略图都是一片漆黑.:-( 然后就把这个缩略图类单拿出来进行测试,发现只要是手机拍出来的照片都不能进行缩略图的处理.... 二.问题分析以及解决方案 经过群里的请教,发现问题可能是出现在文件的类型的判断上,因为png图片自带一个透明的图层,导致不能直接转换成jpg的文件,而手机排出的照片扩展名是jpg. 所以,得出的结论是手机拍出的是jpg扩展名的png图片. 由于扩展名是可以随意修改的,

Android简单实现图片缩略图类ThumbnailUtils

在Android 2.2版本中,新增了一个ThumbnailUtils工具类来是实现缩略图,此工具类的功能是强大的,使用是简单, 它提供了一个常量和三个方法.利用这些常数和方法,可以轻松快捷的实现图片和视频的缩略图功能. 方法不多介绍,直接上代码 : private ImageView imageView; private Button button; private boolean IsThumb=true; @Override protected void onCreate(Bundle s

常用工具类9-上传缩略图类

public class Thumbnail { private Image srcImage; private string srcFileName; /// <summary> /// 创建 /// </summary> /// <param name="FileName">原始图片路径</param> public bool SetImage(string FileName) { srcFileName = Utils.GetMap

.NET 等宽、等高、等比例、固定宽高生成缩略图 类

根据原图片生成等比缩略图 #region 根据原图片生成等比缩略图 /// <summary> /// 根据源图片生成缩略图 /// </summary> /// <param name="imgPath_old">源图(大图)物理路径</param> /// <param name="imgPath_new">缩略图物理路径(生成的缩略图将保存到该物理位置)</param> /// <p

php生成验证码,缩略图及水印图的类分享

封装了一个类,可生成验证码,缩略图,及水印图,分享给大家 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

封装了一个类,可生成验证码,缩略图,及水印图

<?php class image{ session_start(); //验证码类 static public function verify($code,$width=75,$height=25,$n=4){ header("content-type:image/png"); // 创建画布 $img=imagecreatetruecolor($width,$height); // 设置背景色 $bgcolor=imagecolorallocate($img,mt_rand(

经典的图片上传并绘制缩略图的类的代码

首先我们有3个文件 1个文件夹 images文件夹是默认存储图片地址 index.php是主页面 fileupload.class.php是图片上传类 ResizeImage.class.php是图片缩略图类 fileupload.class.php代码如下: <?php /** * file: fileupload.class.php 文件上传类FileUpload * 本类的实例对象用于处理上传文件,可以上传一个文件,也可同时处理多个文件上传 */ class FileUpload { pr

ThinkPHP3验证码、文件上传、缩略图、分页(自定义工具类、session和cookie)

验证码 TP框架中自带了验证码类 位置:Think/verify.class.php 在LoginController控制器中创建生存验证码的方法 login.html登陆模板中 在LoginController控制器中判断验证码是否正确并且判断登陆是否成功 文件上传 用到的知识点: 1.文件上传的时候,要设置表单的enctype属性 2.$_FILE[名字][]用来接收文件的信息 第二维的字段: name size error type tmp_name 3.move_uploaded_fil