/**
* 可扩展的缩略图生成函数 * 在http://yodoo.com的论坛里可以获得最新版本(注册用户) * 演示效果也请登录http://yodoo.com看看,该站所有的缩略图(jpg,png)都是使用该函数生成的 * * 转载请保留完整信息 * * @author austin chin <austinfay@hotmail.com> http://yodoo.com * @version $revision: 1.7 $ * * * version * * + 表示增加的功能 * – 表示丢弃的功能 * c 表示修正的功能 * e 表示扩展了功能 * * v1.5 * makethumb($srcfile, $dstfile, $dstw, $dsth, $option=1) * * v1.6 * + 增加了剪切模式 * + $option 8: 宽度最佳缩放 * + $option 16: 高度最佳缩放 * makethumb($srcfile, $dstfile, $dstw, $dsth, $option=1, $cutmode=0, $startx=0, * $starty=0) * * v1.7 * e 返回值改为数组,第一个元素是代码 0 表示正常, 其它位错误代码;第二个元素是错误描述。 * 错误代码: * -1 源文件不存在。 * -2 不支持的图片输出函数 * -3 不支持的图片创建函数 * -4 http头信息已经输出,无法向浏览器输出图片。 * -5 无法检测输出的图片类型 * + 增加函数 message2image 可以把字符串输出成图片格式 */ /** * 可扩展的缩略图生成函数 * * @param string $srcfile 源文件 * @param string $srcfile 目标文件 * @param int $dstw 目标图片的宽度(单位:像素) * @param int $dsth 目标图片的高度(单位:像素) * @param int $option 附加参数,可以相加使用,如1+2(或者 1|2)表示同时执行1和2的功能。 * 1: 默认,输出到指定文件 2: 图片内容输出到浏览器 4: 不保持图片比例 * 8:宽度最佳缩放 16:高度最佳缩放 * @param int $cutmode 剪切模式 0: 默认模式,剪切模式 1: 左或上 2: 中 3: 右或下 * @param int $startx 剪切的起始横坐标(像素) * @param int $starty 剪切的起始纵坐标(像素) * @return array return[0]=0: 正常; return[0] 为错误代码 return[1] string: 错误描述 */ define(op_to_file, 1); //输出到指定文件 define(op_output, 2); //图片内容输出到浏览器 define(op_not_keep_scale, 4); //不保持图片比例, 即使用拉伸 define(op_best_resize_width, 8); //宽度最佳缩放 define(op_best_resize_height, 16); //高度最佳缩放 define(cm_default, 0); // 默认模式 define(cm_left_or_top, 1); // 左或上 define(cm_middle, 2); // 中 define(cm_right_or_bottom, 3); // 右或下 function makethumb($srcfile, $dstfile, $dstw, $dsth, $option=op_to_file, $cutmode=cm_default, $startx=0, $starty=0) { $img_type = array(1=>”gif”, 2=>”jpeg”, 3=>”png”); $type_idx = array(“gif”=>1, “jpg”=>2, “jpeg”=>2, “jpe”=>2, “png”=>3); if (!file_exists($srcfile)) { return array(-1, “source file not exists: $srcfile.”); } $path_parts = @pathinfo($dstfile); $ext = strtolower ($path_parts[“extension”]); if ($ext == “”) { return array(-5, “cant detect output images type.”); } $func_output = “image” . $img_type[$type_idx[$ext]]; if (!function_exists ($func_output)) { return array(-2, “function not exists for output:$func_output.”); } $data = @getimagesize($srcfile); $func_create = “imagecreatefrom” . $img_type[$data[2]]; if (!function_exists ($func_create)) { return array(-3, “function not exists for create:$func_create.”); } $im = @$func_create($srcfile); $srcw = @imagesx($im); $srch = @imagesy($im); $srcx = 0; $srcy = 0; $dstx = 0; $dsty = 0;
if ($option & op_best_resize_width) { $dsth = round($dstw * $srch / $srcw); } if ($option & op_best_resize_height) { $dstw = round($dsth * $srcw / $srch); } $fdstw = $dstw; $fdsth = $dsth; if ($cutmode != cm_default) { // 剪切模式 1: 左或上 2: 中 3: 右或下 $srcw -= $startx; $srch -= $starty; if ($srcw*$dsth > $srch*$dstw) { $testw = round($dstw * $srch / $dsth); $testh = $srch; } else { $testh = round($dsth * $srcw / $dstw); $testw = $srcw; } switch ($cutmode) { case cm_left_or_top: $srcx = 0; $srcy = 0; break; case cm_middle: $srcx = round(($srcw – $testw) / 2); $srcy = round(($srch – $testh) / 2); break; case cm_right_or_bottom: $srcx = $srcw – $testw; $srcy = $srch – $testh; } $srcw = $testw; $srch = $testh; $srcx += $startx; $srcy += $starty; } else { // 原始缩放 if (!($option & op_not_keep_scale)) { // 以下代码计算新大小,并保持图片比例 if ($srcw*$dsth>$srch*$dstw) { $fdsth=round($srch*$dstw/$srcw); $dsty=floor(($dsth-$fdsth)/2); $fdstw=$dstw; } else { $fdstw=round($srcw*$dsth/$srch); $dstx=floor(($dstw-$fdstw)/2); $fdsth=$dsth; }
$dstx=($dstx<0)?0:$dstx; $dsty=($dstx<0)?0:$dsty; $dstx=($dstx>($dstw/2))?floor($dstw/2):$dstx; $dsty=($dsty>($dsth/2))?floor($dsth/s):$dsty; } } /// end if ($cutmode != cm_default) { // 剪切模式 if( function_exists(“imagecopyresampled”) and function_exists(“imagecreatetruecolor”) ){ $func_create = “imagecreatetruecolor”; $func_resize = “imagecopyresampled”; } else { $func_create = “imagecreate”; $func_resize = “imagecopyresized”; } $newim = @$func_create($dstw,$dsth); $black = @imagecolorallocate($newim, 0,0,0); $back = @imagecolortransparent($newim, $black); @imagefilledrectangle($newim,0,0,$dstw,$dsth,$black); @$func_resize($newim,$im,$dstx,$dsty,$srcx,$srcy,$fdstw,$fdsth,$srcw,$srch); if ($option & op_to_file) { @$func_output($newim,$dstfile); } if ($option & op_output) { if (function_exists(“headers_sent”)) { if (headers_sent()) { return array(-4, “http already sent, cant output image to browser.”); } } header(“content-type: image/” . $img_type[$type_idx[$ext]]); @$func_output($newim); } @imagedestroy($im); @imagedestroy($newim); return array(0, “ok”); } |
高质量缩略图的生成函数(多种剪切模式,按高度宽度最佳缩放等)-PHP教程,PHP应用
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 高质量缩略图的生成函数(多种剪切模式,按高度宽度最佳缩放等)-PHP教程,PHP应用
相关推荐
-      PHP源码-利用 QQWry.Dat 实现 IP 地址高效检索
-      Php高手带路–问题汇总解答[2]
-      PHPQQ编程(2):取QQ在线状态
-      php5手动最简安装方法
-      福利彩票幸运号码自动生成器
-      PHP开发利器-PRADO 1.6
-      在Apache 服务器上启用PHP支持
-      Windows2000_pro下安装Apache+PHP4+My