百科 教育 动画 游戏 博览 网址 金融 搜搜 资料 新闻
触屏版

close ◇ 读取数据,请稍候 Loading...

.: Welcome to flymote.com [flymot.com] :.

网页太慢?试试: 或 [ 刷新 ]




  »

◆ 其它资料:.
第九套广播体操 分享(1252)
佳木斯快乐舞步视频分享(1970)
缩略图处理函数模块(2068)
投票功能模块(2378)
五行健康操 分享(2378)
纯PHP编写的PHP 简易中文分词(SCWS) sqlite词典工具(2835)
Flash网上投票系统 PHP李茂祥修改版 含flash源文件(4385)
读写 ini 文件的类(5360)
RSSLite RSS处理类(5375)
Access XML导入Mysql数据库的程序(5377)

缩略图处理函数模块

1970-01-01   李茂祥    原创   阅读: 2068   【本类别其它资料】 【资料库首页
上一篇 收藏 评论 打印 收藏夹 发布 下一篇

本模块主要用来实现缩略图的实现,提供了一些相关的图像处理函数和方法; 对提供的原始图像,按照给定的尺寸来制作相应的缩略图,可以给定一个固定的边框,可以打上水印,输出为文件或直接显示; 文件输出是直接保存在当前域名根目录下的thumb目录下面,文件格式为文件名-宽度-高度.扩展名; 支持的文件格式为 jpg gif png wbmp xbm bmp ,bmp是采用一个开源函数; 注意 GD库对某些数码图片是不支持的,有一些图片处理是不成功的!
〖缩略图处理〗

<?php
/** limaoxiang 李茂祥 (C)2008 基于华陌网开发框架调整 
文件说明:--- under PHP4andPHP5 env. ButPHP6?? IDontKnown! ** limaoxiang 2008/11 ** ---

这个文件是系统公共包含文件,作为系统整体框架的一个针对图片处理的功能函数集合而存在(used the GD lib),请保证正常调用!
为便于调用,我将系统框架的核心部分均放PHP的包含路径(includes)下面,请加以注意。
我可能会在以后再加个专门的类来处理图片,而图片处理类也将根据这个函数库改写出来,功能保持一致(在很多地方使用类实例更方便操作)

//在网页里面的调用缩略图:   图片名称和路径,width,height,0
echo "<img src='".getThumb("images/c_hh.jpg",230,300,0)."'>"; //创建缩略图并调用

//在网页里面的调用缩略图:   图片名称和路径,width,height,第二域名,图片原图物理路径
echo "<img src='".findThumb("images/c_hh.jpg",140,150,"<A href='http://www.worldsh.com","D:/apache/htdocs/html/2007/worldsh/upload/'>http://www.worldsh.com","D:/apache/htdocs/html/2007/worldsh/upload/</A>" )("images/c_hh.jpg",230,300,0)."'>"; //这是用在一个地方(如expo.worldsh.com)调用另一个地方(如<A href="http://www.worldsh.com">www.worldsh.com</A>)图片的情况下,是跨域的;如果没有缩略图,就按照指定的位置找到原图创建缩略图

//直接显示缩略图在浏览器里面,启用边框、水印:   
$extends = array(
'copyresampled'=>
 array('sx'=>0,'sy'=>0,'dx'=>0,'dy'=>0,'sw'=>232,'sh'=>74),
"watermark"=>
 array("image"=>"d:/apache/htdocs/html/2007/worldsh/cn/share/images/logo.gif","place"=>9,"alpha"=>80),
"border"=>
 array("color"=>"red","width"=>2,"border_w"=>230,"border_h"=>300)
);
renderImage("images/c_hh.jpg","","","",115,37,$extends);

---------------------------------- 李茂祥 2008/11 --------------------------------
*/
error_reporting(E_ALL^E_NOTICE);
$pic_extensions = array("jpg","gif","jpeg","peg","png","bmp");//peg 也是对jpeg的
$suffixes=array("Bytes","KB","MB","GB","TB","PB");
define("JPG_QUALITY"70);

$colour = array(
 
'aliceblue'     => array(240248255),
 
'antiquewhite'  => array(250235215),
 
'aqua'          => array(0255255),
 
'aquamarine'    => array(127255212),
 
'azure'         => array(240255,  255),
 
'beige'         => array(245245220),
 
'bisque'        => array(255228196),
 
'black'         => array(000),
 
'blanchedalmond'=> array(255235205),
 
'blue'          => array(00255),
 
'blueviolet'    => array(13843226),
 
'brown'         => array(1654242),
 
'burlywood'     => array(222184135),
 
'cadetblue'     => array(95158160),
 
'chartreuse'    => array(1272550),
 
'chocolate'     => array(21010530),
 
'coral'         => array(25512780),
 
'cornflowerblue'=> array(100149,  237),
 
'cornsilk'      => array(255248220),
 
'crimson'       => array(2202060),
 
'cyan'          => array(0255255),
 
'darkblue'      => array(0013),
 
'darkcyan'      => array(0139139),
 
'darkgoldenrod' => array(18413411),
 
'darkgray'      => array(169169169),
 
'darkgreen'     => array(01000),
 
'darkkhaki'     => array(189183107),
 
'darkmagenta'   => array(1390139),
 
'darkolivegreen'=> array(8510747),
 
'darkorange'    => array(2551400),
 
'darkorchid'    => array(15350204),
 
'darkred'       => array(13900),
 
'darksalmon'    => array(233150122),
 
'darkseagreen'  => array(143188143),
 
'darkslateblue' => array(7261139),
 
'darkslategray' => array(477979),
 
'darkturquoise' => array(0206209),
 
'darkviolet'    => array(1480211),
 
'deeppink'      => array(25520147),
 
'deepskyblue'   => array(0191255),
 
'dimgray'       => array(105105105),
 
'dodgerblue'    => array(30144255),
 
'firebrick'     => array(1783434),
 
'floralwhite'   => array(255250240),
 
'forestgreen'   => array(3413934),
 
'fuchsia'       => array(2550255),
 
'gainsboro'     => array(220220220),
 
'ghostwhite'    => array(248248255),
 
'gold'          => array(2552150),
 
'goldenrod'     => array(21816532),
 
'gray'          => array(0x800x800x80),
 
'green'         => array(01280),
 
'greenyellow'   => array(17325547),
 
'honeydew'      => array(240255240),
 
'hotpink'       => array(255105180),
 
'indianred'     => array(2059292),
 
'indigo'        => array(750130),
 
'ivory'         => array(255255240),
 
'khaki'         => array(240230140),
 
'lavender'      => array(230230250),
 
'lavenderblush' => array(255240245),
 
'lawngreen'     => array(124252,  0),
 
'lemonchiffon'  => array(255250205),
 
'lightblue'     => array(173216230),
 
'lightcoral'    => array(240128128),
 
'lightcyan'     => array(224255255),
 
'lightgoldenrodyellow' => array(250250210),
 
'lightgreen'    => array(144238144),
 
'lightgrey'     => array(211211211),
 
'lightpink'     => array(255182193),
 
'lightsalmon'   => array(255160122),
 
'lightseagreen' => array(32178170),
 
'lightskyblue'  => array(135206250),
 
'lightslategray'=> array(119136153),
 
'lightsteelblue'=> array(176196222),
 
'lightyellow'   => array(255255224),
 
'lime'          => array(02550),
 
'limegreen'     => array(5020550),
 
'linen'         => array(250240230),
 
'magenta'       => array(2550255),
 
'maroon'        => array(0x800x000x00),
 
'mediumaquamarine' => array(102205170),
 
'mediumblue'    => array(00205),
 
'mediumorchid'  => array(18685211),
 
'mediumpurple'  => array(147112219),
 
'mediumseagreen'=> array(60179113),
 
'mediumslateblue'   => array(123104238),
 
'mediumspringgreen' => array(0250154),
 
'mediumturquoise'   => array(72209204),
 
'mediumvioletred'   => array(19921133),
 
'midnightblue'  => array(2525112),
 
'mintcream'     => array(245255250),
 
'mistyrose'     => array(255228225),
 
'moccasin'      => array(255228181),
 
'navajowhite'   => array(255222173),
 
'navy'          => array(00128),
 
'oldlace'       => array(253245230),
 
'olive'         => array(1281280),
 
'olivedrab'     => array(10714235),
 
'orange'        => array(2551650),
 
'orangered'     => array(255,69,0),
 
'orchid'        => array(218,112,214),
 
'palegoldenrod=> array(238,232,170),
 
'palegreen'     => array(152,251,152),
 
'paleturquoise=> array(175,238,238),
 
'palevioletred=> array(219,112,147),
 
'papayawhip'    => array(255,239,213),
 
'peachpuff'     => array(255,218,185),
 
'peru' => array(205,133,63),
 
'pink' => array(255,192,203),
 
'plum' => array(221,160,221),
 
'powderblue' => array(176,224,230),
 
'purple' => array(128,0,128),
 
'red' => array(255,0,0),
 
'rosybrown' => array(188,143,143),
 
'royalblue' => array(65,105,225),
 
'saddlebrown' => array(139,69,19),
 
'salmon' => array(250,128,114),
 
'sandybrown' => array(244,164,96),
 
'seagreen' => array(46,139,87),
 
'seashell' => array(255,245,238),
 
'sienna' => array(160,82,45),
 
'silver' => array(192,192,192),
 
'skyblue' => array(135,206,235),
 
'slateblue' => array(106,90,205),
 
'slategray' => array(112,128,144),
 
'snow' => array(255,250,250),
 
'springgreen' => array(0,255,127),
 
'steelblue' => array(70,130,180),
 
'tan' => array(210,180,140),
 
'teal' => array(0,128,128),
 
'thistle' => array(216,191,216),
 
'tomato' => array(255,99,71),
 
'turquoise' => array(64,224,208),
 
'violet' => array(238,130,238),
 
'wheat' => array(245,222,179),
 
'white' => array(255,255,255),
 
'whitesmoke' => array(245,245,245),
 
'yellow' => array(255,255,0),
 
'yellowgreen' => array(154,205,50),
 
'grayf0' => array(0xF00xF00xF0),
 
'grayee' => array(0xEE0xEE0xEE),
 
'gray33' => array(0x330x330x33),
 
'gray66' => array(0x660x660x66),
 
'gray99' => array(0x990x990x99),
 
'graycc' => array(0xCC0xCC0xCC),
 
'darkyellow1' => array(0xbf,0xb3,0x7d),
 
'darkyellow' => array(0xb1,0x70,0x0e)
 );
/**
* 将gb2312字符转换为unicode编码,GD库处理中文需要unicode编码
* @param string $text 字符串
* @return string 返回unicode编码格式字符串
*/
function gb23122uni($text) {
 
$rtext="";
 
$max=strlen($text);
 for(
$i=0;$i<$max;$i++){
  
$h=ord($text[$i]);
  if(
$h>=160 && $i<$max-1){
   
$rtext.="&#".base_convert(bin2hex(iconv("gb2312","ucs-2",substr($text,$i,2))),16,10).";";
   
$i++;
  }else{
   
$rtext.=$text[$i];
  }
 }
 return 
$rtext;
}

/**
* 在图片中写文字,支持中文
* @param resource $im 图像资源对象,注意是引用
* @param string $text 要输出的字符串
* @param int $size 字符大小
* @param int $x 字符串左下角X坐标
* @param int $y 字符串左下角Y坐标
* @param int $angle 字符串角度
* @param string $color 颜色字符串
* @param string $font 字符的字体
* @return NULL 直接处理
*/
function printStr(&$im,$text='错误!',$size=20,$x=0,$y=30,$angle=0,$color='red',$font='SIMHEI.TTF'){
global 
$colour,$colour1;
$color allocateColor($im$color);
$text gb23122uni($text);
// Add some shadow to the text
imagettftext($im$size$angle,$x$y$color$font$text);
}

/**
* 定义颜色,赋给相应的图像资源对象
* @param resource $img 图像资源对象,注意是引用
* @param string $color 颜色字符串
* @return string 返回图像资源对象下相应颜色的标识符 注意:颜色数组colour1的相应定义将被换成标识符
*/
function allocateColor(&$img$color) {
 global 
$colour,$colour1;
  
$color trim(strtolower($color));
  
$color=preg_replace "/[{}\(\)'\"\,\:]/",""$color);//去除多余内容,for xhtml2pic 's parser
  
if (!isset($colour1[$color]))
   if (!isset(
$colour[$color]))
    
$color1 =$colour['black'];//die("色彩未被定义,请首先定义你选择的色彩!($color)");
   
else
    
$color1 =$colour[$color];
  else
   
$color1 $colour1[$color];
  if (
is_int($color1)) return $color1;
  else
  {
   
$colour1[$color] = ImageColorAllocate($img$color1[0], $color1[1], $color1[2]);
   return 
$colour1[$color];
  }
}

/**
* 把一个数值,按照文件数据量大小的格式来显示,即??KB
* @param string $size 数值字符串
* @return string 返回指定格式字符串
*/
function getSize($size) {
 global 
$suffixes;
 
$i=0;
 while(
$size>=1024) {
  
$size/=1024;
  
$i++;
 }
 return 
number_format($size,2)." ".$suffixes[$i];
}

/**
* 通过与 MAX_THUMB_WIDTH 和 MAX_THUMB_HEIGHT的比较,获得缩略图的实际大小
* @param int $x 宽度
* @param int $y 高度
* @param int $MAX_THUMB_WIDTH 限定的宽度
* @param int $MAX_THUMB_HEIGHT 限定的高度
* @return array 返回包含相应信息的数组 array(width,height)
*/
function getThumbHW($x,$y,$MAX_THUMB_WIDTH,$MAX_THUMB_HEIGHT){
 if( 
$x $MAX_THUMB_WIDTH && $y $MAX_THUMB_HEIGHT ){
  
$dim[0]=$x;
  
$dim[1]=$y;
 }
 else{
  
$tmp1=$x/$MAX_THUMB_WIDTH;
  
$tmp2=$y/$MAX_THUMB_HEIGHT;
  
$factor=($tmp1>$tmp2?$tmp1:$tmp2);

  
$dim[0]=ceil($x/$factor);
  
$dim[1]=ceil($y/$factor);
 }
 return 
$dim;
}

/**
* 获得图像资源
* @param string $path 图像的路径和名称
* @return array 返回成功否(boolean)与 图像的资源指针数组
*/
function getImg($path){
 
$dim = @getimagesize($path);
 
/* 下面是 MIME 列表
imagetype  Returned value 
IMAGETYPE_GIF image/gif 
IMAGETYPE_JPEG image/jpeg 
IMAGETYPE_PNG image/png 
IMAGETYPE_SWF application/x-shockwave-flash 
IMAGETYPE_PSD image/psd 
IMAGETYPE_BMP image/bmp 
IMAGETYPE_TIFF_II (intel byte order) image/tiff 
IMAGETYPE_TIFF_MM (motorola byte order)  image/tiff 
IMAGETYPE_JPC application/octet-stream 
IMAGETYPE_JP2 image/jp2 
IMAGETYPE_JPX application/octet-stream 
IMAGETYPE_JB2 application/octet-stream 
IMAGETYPE_SWC application/x-shockwave-flash 
IMAGETYPE_IFF image/iff 
IMAGETYPE_WBMP image/vnd.wap.wbmp 
IMAGETYPE_XBM image/xbm 
IMAGETYPE_ICO image/vnd.microsoft.icon 
*/
 
 
ini_set('memory_limit''50M');
 
 switch (
$dim['mime']) {
 case 
'image/jpeg':
  
$im imageCreateFromJPEG($path);
  break;
 case 
'image/gif':
  
$im imageCreateFromGIF($path);
  break;
 case 
'image/png':
  
$im imageCreateFromPNG($path);
  break;
 case 
'image/bmp':
  
$im imagecreatefrombmp($path);
  break;
 case 
'image/vnd.wap.wbmp':
  
$im imagecreatefromwbmp($path);
  break; 
 case 
'image/xbm':
  
$im imagecreatefromxbm($path);
  break; 
 default:
  
$im false;
  break;
 }

  if(!
$im) { // 如果不成功,形成一个包含错误信息的图片
        
$im  imagecreatetruecolor(25060); /* Create a blank image */
        
$bgc imagecolorallocate($im255255255);
        
$tc  imagecolorallocate($im000);
        
imagefilledrectangle($im3324858$bgc);
        
printStr($im);
        
imagestring($im1545"Err:$path"$tc);
        return array(
false,$im);
  }
  return array(
true,$im);
}

/**
* 图象处理的主函数
* @param string $dir 图像的来源路径
* @param string $pic 图像名称
* @param string $dest_dir 新图像的路径
* @param string $dest 新图像名称
* @param int $dw 新图像宽度
* @param int $dh 新图像高度
* @param array $extends 扩展参数,包含如下元素:
array(copyresampled=>array(sx,sy,dx,dy,sw,sh),border=>array(color,width),watermark=>array(image,place,alpha))
 copyresampled 用来实现缩略图或图片的部分截取,这个是基本参数定下:
  int $sx 原图取样点x坐标 int $sy 原图取样点y坐标 int $dx 目标图取样点x坐标 int $dy 目标图取样点y坐标 int $sw 原图取样宽度 int $sh 原图取样高度
 border 用来定边框,定下边框的颜色和宽度;
  string $color 边框的颜色,必须是前面参数中颜色数组已定义过的颜色 string $color_in 边框内部的颜色,必须是前面参数中颜色数组已定义过的颜色 int $width 边框的宽度 int border_h 边框高度(必须大于缩略图限定高度) int $border_w 边框宽度(必须大于缩略图限定宽度)
 watermark 用来定水印,定下:
  string $image 水印图片的位置和名称 int $place 水印位置选择1-9(上中下左中右) int $alpha 水印的透明度0-100
* @return boolean 如果成功得到相应的图片(返回 true),否则返回一个包含错误信息的图片(getImg函数)
*/
function renderImage($dir,$pic,$dest_dir,$dest,$dw,$dh,$extends){
 global 
$dim,$colour;  //从create_thumb得到,并传递给getImg
$colour1 = array();
$img_info getImg($dir.$pic);
$im $img_info[1];
if (
$img_info[0]){ //图片成功取得
//var_dump($extends);exit;
if (@$extends['border']){
 
$border = @$extends['border']['width']?$extends['border']['width']:1;
 
$border_w = (@$extends['border']['border_w']>$dw+$border*2)?$extends['border']['border_w']:$dw+$border*2;
 
$border_h = (@$extends['border']['border_h']>$dh+$border*2)?$extends['border']['border_h']:$dh+$border*2;
 
$new imagecreatetruecolor($border_w,$border_h);
}else
 
$new imagecreatetruecolor($dw,$dh);//var_dump($extends);
 
if($new){
  if (@
$extends['copyresampled']){
   
//取样处理,先初始化一些变量
   
$sx = @$extends['copyresampled']['sx']?$extends['copyresampled']['sx']:0;
   
$sy = @$extends['copyresampled']['sy']?$extends['copyresampled']['sy']:0;
   
$dx = @$extends['copyresampled']['dx']?$extends['copyresampled']['dx']:0;
   
$dy = @$extends['copyresampled']['dy']?$extends['copyresampled']['dy']:0;
   
$sw = @$extends['copyresampled']['sw']?$extends['copyresampled']['sw']:150;
   
$sh = @$extends['copyresampled']['sh']?$extends['copyresampled']['sh']:150;
   
$dw $dw?$dw:150;
   
$dh $dh?$dh:150;

   if (@
$extends['border']){
   
$border_color = @$extends['border']['color']?$extends['border']['color']:"black";
   
$color_in = @$extends['border']['color_in']?$extends['border']['color_in']:"darkyellow";
   
$color allocateColor($new,$border_color);
   
$color_in allocateColor($new,$color_in);
   if (
$border == 1)
    
ImageRectangle($new11$border_w-2$border_h-2$color);
   else{
    
imagefilledrectangle($new00$border_w$border_h,$color);
    
imagefilledrectangle($new$border$border$border_w-$border$border_h-$border,$color_in);
    }
    if(!
imagecopyresampled($new,$im,round(($border_w-$dw)/2),round(($border_h-$dh)/2),$sx,$sy,$dw,$dh,$sw,$sh))
    return 
false;
   }else
  if(!
imagecopyresampled($new,$im,$dx,$dy,$sx,$sy,$dw,$dh,$sw,$sh))
    return 
false;
  }

   
//水印处理
  
if( @$extends['watermark'] ) {
   
$dim1 $dim;
   
$dim = array();
   
$logo_ getImg($extends['watermark']['image']);
   
$watermark_logo $logo_[1];
   if (!
$logo_[0]) return false;
   
$logo_w  imageSX($watermark_logo);
   
$logo_h  imageSY($watermark_logo);
   
$img_w  = @$border_w>$dw?$border_w:$dw;
   
$img_h  = @$border_h>$dh?$border_h:$dh;
   
$wmwidth $img_w $logo_w;
   
$wmheight $img_h $logo_h;

   
$animatedgif 0;
   if(
$dim['mime'] == 'image/gif') {
     
$temp file_get_contents($extends['watermark']['image']);
     
$animatedgif strpos($temp'NETSCAPE2.0') === FALSE 1;
     unset(
$temp);
   }
   if( 
$wmwidth 10 && $wmheight 10 && !$animatedgif) {
      switch(
$extends['watermark']['place']) {
       case 
1:
        
$x = +5;
        
$y = +5;
        break;
       case 
2:
        
$x = ($img_w $logo_w) / 2;
        
$y = +5;
        break;
       case 
3:
        
$x $img_w $logo_w-5;
        
$y = +5;
        break;
       case 
4:
        
$x = +5;
        
$y = ($img_h $logo_h) / 2;
        break;
       case 
5:
        
$x = ($img_w  $logo_w) / 2;
        
$y = ($img_h $logo_h) / 2;
        break;
       case 
6:
        
$x $img_w $logo_w;
        
$y = ($img_h $logo_h) / 2;
        break;
       case 
7:
        
$x = +5;
        
$y $img_h $logo_h-5;
        break;
       case 
8:
        
$x = ($img_w  $logo_w) / 2;
        
$y $img_h $logo_h;
        break;
       case 
9:
        
$x $img_w $logo_w-5;
        
$y $img_h $logo_h-5;
        break;
      }

      
imageAlphaBlending($watermark_logotrue);
      
imageCopyMerge($new$watermark_logo$x$y00$logo_w$logo_h$extends['watermark']['alpha']);
     }
  }
//水印 end
 
}//处理 end
}else
 
$new $im;

if (
$new){   //下面输出
 
$temp $dest_dir.$dest;
 if (empty(
$temp)) //如果不指定目标路径,直接输出浏览器
  
if (!headers_sent($filename$linenum))
     
header('Content-type: ' $dim1['mime']);
    else
    { 
     echo 
"<script>alert('图片处理错误:<A href="file://\\n\\n">\\n\\n</A>输出图片前不能有其它信息输出!请检查$filename, $linenum');</script>";
     
return false;
  }
 switch (
$dim1['mime']) {
 case 
'image/gif':
  
$ret = @imagegif($new,$temp);
  break;
 case 
'image/png':
  
$ret = @imagepng($new,$temp);
  break;
 case 
'image/vnd.wap.wbmp':
  
$ret = @image2wbmp($new,$temp);
  break; 
 default: 
//case 'image/jpeg':
  
$ret = @imagejpeg($new,$temp,JPG_QUALITY);
  break;
 }
 unset(
$dim,$colour1);
 if(
$ret)
   return 
true;
 else
   return 
false;

 @
imagedestroy($new);
}
else
 return 
false;
 @
imagedestroy($im);
}

/**
* 创建缩略图象
* @param string $dir 图像的源路径
* @param string $src 源图像的名称
* @param string $dest_dir 新图像的路径
* @param string $dest 新图像的名称
* @param int $MAX_THUMB_WIDTH 限定的宽度
* @param int $MAX_THUMB_HEIGHT 限定的高度
* @param int/array $ext 扩展参数,参见renderImage;如果是1,将自动使用默认参数进行水印处理,默认参数:array("watermark"=>array("image"=>"d:/apache/htdocs/html/2007/worldsh/cn/share/images/logo.gif","place"=>9,"alpha"=>80))
* @return boolean 如果成功得到相应的图片,否则返回一个包含错误信息的图片
*/
function create_thumb($dir,$src,$dest_dir,$dest,$MAX_THUMB_WIDTH,$MAX_THUMB_HEIGHT,$more=0){
 
$temp$dir.$src;
 
$dim = @getimagesize($temp);
 if (!
$dim )
  return 
false;
 
$thumb getThumbHW($dim[0],$dim[1],$MAX_THUMB_WIDTH,$MAX_THUMB_HEIGHT);
 if (!isset(
$more['copyresampled']))
  
$extends['copyresampled'] = array('sx'=>0,'sy'=>0,'dx'=>0,'dy'=>0,'sw'=>$dim[0],'sh'=>$dim[1]);
if (
is_int($more) && $more)
  
$extends["watermark"]= array("image"=>"d:/apache/htdocs/html/2007/worldsh/cn/share/images/logo.gif","place"=>9,"alpha"=>70);
else{
 if (
is_array($more['watermark'])) $extends['watermark'] = $more['watermark'];
 if (
is_array($more['border'])) $extends['border'] = $more['border'];//var_dump($extends);
}
// var_dump($more,$extends);
 
if (renderImage($dir,$src,$dest_dir,$dest,$thumb[0],$thumb[1],$extends))
  return 
true;
 else return 
false;
}

/**
* 上传并创建缩略图象
* @param string $input 上传图像的表单中文件上传按钮的id
* @param string $dest_dir 新图像的路径
* @param string $dest 新图像的名称
* @param string $thumb_dest_dir 新缩略图像的路径
* @param string $thumb_dest 新缩略图像的名称
* @param int $MAX_THUMB_WIDTH 限定的宽度
* @param int $MAX_THUMB_HEIGHT 限定的高度
* @param int $over 保存上传的文件时是否覆盖同名文件,1:覆盖
* @return boolean 如果成功得到相应的图片并返回true,否则返回false
*/
function upload($input,$dest_dir,$dest,$thumb_dest_dir,$thumb_dest,$MAX_THUMB_WIDTH,$MAX_THUMB_HEIGHT,$over=1){
global 
$pic_extensions,$extends;
if(
$_FILES[$input]['name']!=''){
 
$ext=strtolower(substr($_FILES[$input]['name'],-3,3));
 if(
$pic_extensions[$ext]&&$ext!=''){
  
$file $dest_dir.$dest;
  if(!
$over && file_exists($file))
   return 
false;
  elseif(@
move_uploaded_file($_FILES[$input]['tmp_name'],$file))
  { 
   
create_thumb($_FILES[$input]['tmp_name'],"",$thumb_dest_dir,$thumb_dest,$MAX_THUMB_WIDTH,$MAX_THUMB_HEIGHT,$extends);
   return 
true;
  }
  else
   return 
false;
 } 
//ext
 
else
  return 
false;
}else
 return 
false;
}

/**
* 根据图象创建缩略图,显示的其存储路径和文件名,根据域名来自动区分(使用DOCUMENT_ROOT);
注意:缩略图象保存在域名根目录/thumb下面,而文件命名采用 文件名-width-height.扩展名 的形式,如a.jpg的120*110的图,将成为a-120-110.jpg
* @param string $input 原始图像的路径及名称
* @param int $width 缩略图控制的宽度
* @param int $height 缩略图控制的高度
* @param int $mode 显示文件绝对路径还是以网站根开始的路径,默认1文件绝对路径,0网站
* @param int $pop_error 是否出现alert警告,默认1弹出,0不弹出
* @param int $auto_watermark 是否自动启用水印处理,默认是0,不用,这样将根据定义扩展参数数组来处理
* @return string 得到相应的图片缩略图象的存储路径和文件名,否则返回false
*/
function getThumb($input,$width=140,$height=150,$mode=1,$pop_error=1,$auto_watermark=0){
global 
$extends;
$path realpath($input);
if (!
$path)
 if (
$pop_error) {
  echo 
"<script>alert('发现错误:<A href="file://\\n\\n">\\n\\n</A> 文件 $input 不存在或不能正常访问,请确认文件正常!')</script>";
  
return false;
 }else
  return 
false;
$filename basename($path);
$temp strrpos($filename".");
$ext_name substr($filename,$temp+1);
$name substr($filename,0,$temp);
$small_pic $name."-".$width."-".$height.".".$ext_name;
if (!
is_dir($_SERVER['DOCUMENT_ROOT']."/thumb")) {
  @
mkdir$_SERVER['DOCUMENT_ROOT']."/thumb" );
  @
chmod$_SERVER['DOCUMENT_ROOT']."/thumb",0777 );
};
//var_dump($auto_watermark);
$filename "/thumb/$small_pic";
$a $_SERVER['DOCUMENT_ROOT'].$filename;//直接在file_exists 里面if (file_exists(..))会不正常
if (file_exists($a)) {
    return 
$mode?$_SERVER['DOCUMENT_ROOT'].$filename:$filename;
} else {
  if (
fmod(time(),60)) return $input;//限制处理的频率
  
if ($auto_watermark$extends 1;
    
$temp create_thumb($path,"",$_SERVER['DOCUMENT_ROOT'].$filename,"",$width,$height,$extends);
    if (!
$temp && $pop_error) {
  echo 
"<script>alert('处理缩略图错误:<A href="file://\\n\\n">\\n\\n</A> 文件 $input 缩略图创建失败,请确认文件正常!')</script>";
  
return false;
 }
  return 
$mode?$_SERVER['DOCUMENT_ROOT'].$filename:$filename;
}
}

/**
* 根据bmp图象创建图像,从php.net取得的开源代码,我修改了一点;
* @param string $p_sFile 原始图像的路径及名称
* @return resource 得到相应的图片资源对象,否则返回false
*/
function imagecreatefrombmp($p_sFile

 
/*       //    Load the image into a string 
        $file    =    fopen($p_sFile,"rb"); 
        $read    =    fread($file,10); 
        while(!feof($file)&&($read<>"")) 
            $read    .=    fread($file,1024); 
*/     
 
$read file_get_contents($p_sFile);//为提高效率进行的修改,但没有直接的文件操作可靠
  
if (!$read) return false;
  
$temp    =    unpack("H*",$read); 
  
$hex    =    $temp[1]; 
  
$header    =    substr($hex,0,108); 
        
        
//    Process the header 
        //    Structure: <A href="http://www.fastgraph.com/help/bmp_header_format.html">http://www.fastgraph.com/help/bmp_header_format.html</A> 
        
if (substr($header,0,4)=="424d"
        { 
            
//    Cut it in parts of 2 bytes 
         //php4不能用   $header_parts    =    str_split($header,2); 
            
$header_parts    =    str_split_cn($header,2,0); 
            
            
//    Get the width        4 bytes 
            
$width            =    hexdec($header_parts[19].$header_parts[18]); 
            
            
//    Get the height        4 bytes 
            
$height            =    hexdec($header_parts[23].$header_parts[22]); 
            
            
//    Unset the header params 
            
unset($header_parts); 
        } 
        
        
//    Define starting X and Y 
        
$x                =    0
        
$y                =    1
        
        
//    Create newimage 
        
$image            =    imagecreatetruecolor($width,$height); 
        
        
//    Grab the body from the image 
        
$body            =    substr($hex,108); 

        
//    Calculate if padding at the end-line is needed 
        //    Divided by two to keep overview. 
        //    1 byte = 2 HEX-chars 
        
$body_size        =    (strlen($body)/2); 
        
$header_size    =    ($width*$height); 

        
//    Use end-line padding? Only when needed 
        
$usePadding        =    ($body_size>($header_size*3)+4); 
        
        
//    Using a for-loop with index-calculation instaid of str_split to avoid large memory consumption 
        //    Calculate the next DWORD-position in the body 
        
for ($i=0;$i<$body_size;$i+=3
        { 
            
//    Calculate line-ending and padding 
            
if ($x>=$width
            { 
                
//    If padding needed, ignore image-padding 
                //    Shift i to the ending of the current 32-bit-block 
                
if ($usePadding
                    
$i    +=    $width%4
                
                
//    Reset horizontal position 
                
$x    =    0
                
                
//    Raise the height-position (bottom-up) 
                
$y++; 
                
                
//    Reached the image-height? Break the for-loop 
                
if ($y>$height
                    break; 
            } 
            
            
//    Calculation of the RGB-pixel (defined as BGR in image-data) 
            //    Define $i_pos as absolute position in the body 
            
$i_pos    =    $i*2
            
$r        =    hexdec($body[$i_pos+4].$body[$i_pos+5]); 
            
$g        =    hexdec($body[$i_pos+2].$body[$i_pos+3]); 
            
$b        =    hexdec($body[$i_pos].$body[$i_pos+1]); 
            
            
//    Calculate and draw the pixel 
            
$color    =    imagecolorallocate($image,$r,$g,$b); 
            
imagesetpixel($image,$x,$height-$y,$color); 
            
            
//    Raise the horizontal position 
            
$x++; 
        } 
        
        
//    Unset the body / free the memory 
        
unset($body); 
        
        
//    Return image-object 
        
return $image


/**
* 在相应位置查找缩略图,根据文件名在域名空间里面查找,按照先当前域名后www主机的顺序
注意:缩略图象保存在域名根目录/thumb下面,而文件命名采用 文件名-width-height.扩展名 的形式,如a.jpg的120*110的图,将成为a-120-110.jpg
这个函数是用在一个地方调用另一个地方图片的情况下,是跨域的;如果没有缩略图,就按照指定的位置找到原图创建缩略图
* @param string $input 原始图像的路径及名称
* @param int $width 缩略图控制的宽度
* @param int $height 缩略图控制的高度
* @param string $domain 当前找不到,找哪里?写域名,默认<A href="http://www.worldsh.com">http://www.worldsh.com</A> (就是在$domain/thumb下找一下)
* @param string $pre 物理路径前缀,默认D:\apache\htdocs\html\2007\worldsh\upload (就是实在找不到,在这个地方找到原图,用来创建缩略图)
* @param int $auto_watermark 是否自动启用水印处理,默认是0,不用,这样将根据定义扩展参数数组来处理
* @return string 得到相应的图片缩略图象的存储路径和文件名,没有文件就建立缩略图再返回结果
*/
function findThumb($input,$width=140,$height=150,$domain "<A href='http://www.worldsh.com",$pre="D:/apache/htdocs/html/2007/worldsh/upload/",$auto_watermark'>http://www.worldsh.com",$pre="D:/apache/htdocs/html/2007/worldsh/upload/",$auto_watermark</A> = 0 ){
global $extends;
$filename = basename($input);
$temp = strrpos($filename, ".");
$ext_name = substr($filename,$temp+1);
$name = substr($filename,0,$temp);
$small_pic = $name."-".$width."-".$height.".".$ext_name;

$filename = "/thumb/$small_pic";
$a = $_SERVER['
DOCUMENT_ROOT'].$filename;//直接在file_exists 里面if (file_exists(..))会不正常
if (file_exists($a)) {
    return $filename;
} else {
$a = $domain.$filename;
if (file_exists($a)) {
    return $a; }
else {
 if (!is_dir($_SERVER['
DOCUMENT_ROOT']."/thumb")) {
  @mkdir( $_SERVER['
DOCUMENT_ROOT']."/thumb" );
  @chmod( $_SERVER['
DOCUMENT_ROOT']."/thumb",0777 );
 };
 $temp = basename($input);
 if ($auto_watermark) $extends = 1;
 if (file_exists($pre.$temp))
  $temp = create_thumb($pre,$temp,$_SERVER['
DOCUMENT_ROOT'].$filename,"",$width,$height,$extends);
 else{
  echo "<script>alert('
处理缩略图错误:指定的文件 $pre$temp 不存在,请确认文件正常!')</script>";
  return false;
  }
  if (!$temp && $pop_error) {
  echo "<script>alert('
处理缩略图错误:文件 $input 缩略图创建失败,请确认文件正常!')</script>";
  return false;
 }
  return $filename;
 }
}
}
?>
责任编辑: admin

【最近的搜索】:

上一篇 收藏 评论 打印 收藏夹 发布 下一篇
平均得分 0, 共 0 人评分
1 2 3 4 5 6 7 8 9 10
CopyRight(c) 2007 - 2017 All Rights Reserved  【赣ICP备12001042号】
触屏版 | Archiver 20170925 19:35 | 简介 | 帮助 | 留言 | 关于 | 360网站安全检测平台