封装好的图像缩放函数

/**
 * 对上传的图片进行缩放
 * @param 原始文件 $srcFile
 * @param 缩放比例 $percent
 */
function scale($src,$percent){
	//原始图像文件类型,或者用getimage函数获取
// 	$src="1.jpg";
// 	$ext=end(explode(".", $src));//也可以使用扩展名来进行判断
//第一步,得到上传图片相关信息
	//原图宽,高
	$array=getimagesize($src);
//print_r($array);exit;
	$src_w=$array[0];
	$src_h=$array[1];
	//图片类型值
	$typeId=$array[2];
// 	echo $typeId;exit;
	switch($typeId){
		case 1:
			$ext="gif";
			break;
		case 2:
			$ext="jpg";
			break;
		case 3:
			$ext="png";
			break;
		default:
			echo "图片格式不正确,请重新上传!";
			exit;
	}

	//缩放后的图像文件存放值,用随机数和当前的时间戳来命名,防止重复
	$dstFile=rand(100, 999).time().".".$ext; //新图片的文件名,其它地方就可以调用了
// 	echo $dstFile;exit;

	//缩放比例系数
	$percent=0.3;
	//新图宽高,根据缩放比例不同,也许会出现小数位的尺寸,用ceil(进一取整)或者floor(舍一取整)
	$dst_w=ceil($src_w*$percent);
	$dst_h=ceil($src_h*$percent);
	//创建承载新图的画布
	$dst_image=imagecreatetruecolor($dst_w, $dst_h);

	//载入原图,根据上传图片的类型使用对应的函数
	switch($ext){
		case "gif":
			$src_image=imagecreatefromgif($src);
			break;
		case "jpg":
			$src_image=imagecreatefromjpeg($src);
			break;
		case "png":
			$src_image=imagecreatefrompng($src);
			break;
		default:exit;
	}

	//进行缩放
	imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);

	//同上,输出图像到路径
	switch($ext){
		case "gif":
			imagegif($dst_image,$dstFile);
			break;
		case "jpg":
			imagejpeg($dst_image,$dstFile);
			break;
		case "png":
			imagepng($dst_image,$dstFile);
			break;
		default:exit;
	}

	//销毁内存中的残留
	imagedestroy($src_image);
	imagedestroy($dst_image);
}
//测试
$srcFile="1.jpg";
$per="0.3";
scale($srcFile,$per);

*****保留注释内容以便需要的人能完全理解******
时间: 2024-07-28 21:24:07

封装好的图像缩放函数的相关文章

opencv2 矩阵方式 resize图像缩放代码(转载)

http://blog.sina.com.cn/s/blog_74a459380101r0yx.html opencv2 矩阵方式 resize图像缩放代码(转载) (2014-05-16 09:55:35) 转载▼   分类: Opencv_Function 最近学习opencv的时候遇到的一些技术问题,拿出来分享一下.opencv1和opencv2最大的区别就是c++支持,这使得网上有些资料是opencv1的c语言写的,而有些人喜欢c++,当然接口函数也就不同了.下面是一个c++的openc

视频图像处理基础知识0(双线性插值算法进行图像缩放)

双线性插值(说的很明白) 来自:http://www.cnblogs.com/linkr/p/3630902.html http://www.cnblogs.com/linkr/p/3630902.html 双线性插值,这个名字咋一听很高大上的样纸,再在维基百科上一查(见文末,我去,一堆的公式吓死人),像俺这种半文盲,看到公式脑子就懵的类型,真心给跪.虽然看着好复杂,但仔细一看道理再简单不过了,所以还是自己梳理一下好. 双线性插值,顾名思义就是两个方向的线性插值加起来(这解释过于简单粗暴,哈哈)

图像编程学习笔记7——图像缩放

假设放大因子为ratio,(为了避免新图过大或过小,我们在程序中限制0.25≤ratio≤4),缩放(zoom)的变换矩阵很简单: (2.13) 缩放变换的源代码如下,因为和转置的那段程序很类似,程序中的注释就简单一些. [cpp] view plaincopy /** * 函数名: zoom * 参  数: ratio -- 缩放率 * 功  能: 对图片进行水平和垂直镜像操作 *         只保存原图大小的图像数据,如果没有就用白色填充 */ void zoom(double rati

[转载]双线性插值算法进行图像缩放及性能效果优化

原文地址:双线性插值算法进行图像缩放及性能效果优化 一)转自http://handspeaker.iteye.com/blog/1545126 最近在编程时用到了双线性插值算法,对图像进行缩放.网上有很多这方面的资料,介绍的也算明白.但是,这些文章只介绍了算法,并没有具体说怎么实现以及怎么实现最好,举个例子,你可以按照网上文章的算法自己写一个双线性插值程序,用它对一张图片进行处理,然后再用matlab或者openCV的resize函数对同一张图片进行处理,得到的结果是不一样的,如果源图片较小,效

实现基于最近邻内插和双线性内插的图像缩放

平时我们写图像处理的代码时,如果需要缩放图片,我们都是直接调用图像库的resize函数来完成图像的缩放.作为一个机器视觉或者图像处理算法的工作者,图像缩放代码的实现应该是必须掌握的.在众多图像缩放算法中,最近邻内插算法和双线性内插算法最为基本和常见,所以这篇文章就说一说如何用c++实现这两种算法下的 http://pic.cnhubei.com/space.php?uid=1132&do=album&id=823167http://pic.cnhubei.com/space.php?uid

图像缩放算法【转】

转自:http://blog.csdn.net/qq_21792169/article/details/51020005 版权声明:本文为Linux_Google原创文章,转载请加上原创链接. 转载别人的,但是这篇文章写得确实太好了,所以想分享出来,可是原创文章地址找不到了 ,很可惜. 图像缩放算法 摘要:首先给出一个基本的图像缩放算法,然后一步一步的优化其速度和缩放质量: 高质量的快速的图像缩放 全文 分为:      上篇 近邻取样插值和其速度优化      中篇 二次线性插值和三次卷积插值

11、图像缩放算法

正文: 为了便于讨论,这里只处理32bit的ARGB颜色:  代码使用C++;涉及到汇编优化的时候假定为x86平台;使用的编译器为vc2005;  为了代码的可读性,没有加入异常处理代码;  测试使用的CPU为AMD64x2 4200+(2.37G)  和 Intel Core2 4400(2.00G); 速度测试说明:  只测试内存数据到内存数据的缩放  测试图片都是800*600缩放到1024*768; fps表示每秒钟的帧数,值越大表示函数越快 //////////////////////

图像缩放——双线性插值算法

在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值.如果选择一个坐标系统使得  的四个已知点坐标分别为 (0, 0).(0, 1).(1, 0) 和 (1, 1),那么插值公式就可以化简为: 用矩阵运算来表示的话就是: 图像的空间变换,也称几何变换或几何运算,包括图像的平移.旋转.镜像变换.转置.缩放等.空间变换可如下表示:设(u,v)为源图像上的点,(x,y)为目标图像上的点,则空间变换就是将源图像上(u,v)处的颜色值与目标图像上(x,y)处

图像缩放算法

图像缩放算法较多,下面仅以最邻近插值算法和双线性插值算法作介绍. 如下图1所示,表示原始图像和缩放以后的图像. 图1 图像缩放(原始图像à缩放图像) 图像缩放就是将原始图像中的点经过某一算法映射到目标图像的点的行为,即要找到目标图像中的点p1对应在原始图像中点p0,简单而言就是找点p0. 假设: 原始图像src的分辨率为(srcW * srcH): 目标图像dst的分辨率为(dstW * dstH). 那么: 原始图像宽与目标图像宽的比例 原始图像高与目标图像高的比例 由 所以,原始图像中的点p