zoukankan      html  css  js  c++  java
  • 用PHP生成等比图像的方法

    PHP代码

    <?php
    /************************************************************************
    * 函数名称:createSmallImg()
    * 函数说明:创建等比例图片
    * 输入参数:
    	$dir 保存路径
    	$source_img 原图片名称
    	$small_ex 缩率图文件名后缀
    	$maxwidth 最大宽度
    	$maxheight 最大高度
    * 说    明:$maxwidth和$maxheight只能传递一个,如果传最大宽度将自动计算高度,如果传最大高度将自动计算宽度
    * 返 回 值:如果创建成功返回文件保存的地址,否则返回false
    * 编 写 者:李小宇
    * 编写时间:2011/8/18
    **************************************************************************/
    function createSmallImg($dir,$source_img,$small_ex="_s",$maxwidth='',$maxheight='') {
    	if(!empty($maxwidth) && !empty($maxheight)) {
    		return false;
    	}
    	$img_name=substr($source_img,0,-4);
    	$img_ex = strtolower(substr(strrchr($source_img,"."),1));
    	/*注释的这段用作直接在浏览器上显示图片
    	$im=imagecreatefromjpeg($file);
    	header("Content-type: image/jpeg");
    	imagejpeg($im);*/
    	switch($img_ex) {
    		case "jpg":
    			$src_img=imagecreatefromjpeg($dir.$source_img);
    			break;
    		case "gif":
    			$src_img=imagecreatefromgif($dir.$source_img);
    			break;
    		case "png":
    			$src_img=imagecreatefrompng($dir.$source_img);
    			break;
    	}
    	$old_width=imagesx($src_img);
    	$old_height=imagesy($src_img);
    	if(!empty($maxheight) && $old_height>=$maxheight) {
    		$new_height=$maxheight;
    		$new_width=round(($old_width*$new_height)/$old_height);
    	} elseif(!empty($maxwidth) && $old_width>=$maxwidth) {
    		$new_width=$maxwidth;
    		$new_height=round(($old_height*$new_width)/$old_width);
    	}
    	if(!empty($new_width) || !empty($new_height)) {
    		$dst_img=imagecreatetruecolor($new_width,$new_height);
    		imagecopyresampled($dst_img,$src_img,0,0,0,0,$new_width,$new_height,$old_width,$old_height);
    		$smallname=$dir.$img_name.$small_ex.".".$img_ex;
    		switch($img_ex) {
    			case "jpg":
    				imagejpeg($dst_img,$smallname,100);
    				break;
    			case "gif":
    				imagegif($dst_img,$smallname);
    				break;
    			case "png":
    				imagepng($dst_img,$smallname);
    				break;
    		}
    	}
    	return $smallname;
    }
    

    imagecopyresampled比imagecopyresized生成的图片更清晰

    重采样拷贝部分图像并调整大小

    imagecopyresampled() 将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。成功时返回 TRUE, 或者在失败时返回 FALSE.

  • 相关阅读:
    最短路必经点(边)
    [HNOI2008]越狱
    【模版】卢卡斯定理
    偶数
    [USACO17FEB]Why Did the Cow Cross the Road I S
    [USACO17FEB]Why Did the Cow Cross the Road II S
    [USACO07NOV]电话线Telephone Wire
    [JSOI2007]祖码Zuma
    单人纸牌_NOI导刊2011提高(04)
    [USACO13OPEN]重力异常
  • 原文地址:https://www.cnblogs.com/phpfans/p/2145708.html
Copyright © 2011-2022 走看看