缩略图生成程序

 更新时间:2016年11月25日 16:59  点击:1228

一直想在网上找个图片所略图程序,但是一直没有找到无变形的,一般都是对原图进行简单的缩放。
我想也许已经有了,只是我没有找到,所以没办法自己写了一个,其实也不是全是自己写的,只是
在已有的基础上改的!
源码如下:

<?php
/*
*版权说明:该版本是在“IEB_UPLOAD CLASS Ver 1.1”的基础上二次开发的,原程序对
*图片的裁剪将使图片变形、失真!本人在该程序的基础上进行了更改,用数据参数与原图片
*文件参数(主要是指宽和高)进行对比,得出比例值,先生成与原图片同比例缩放的图片,然
*后再以该中间图中心开始截取,从而获得缩略图,当然,图片会被裁剪,但是是最小限度的
*裁剪!
*程序设计:swin.wang  Email: php_in_china@yahoo.com.cn QQ:592298893
*
*该程序你可无限制使用,但请保留版权信息
×
×使用犯法:
*        $upfos = new ieb_upload('photo_file','./up_img'); photo_file 表单文件域名称,不要加$; ./up_img,上传位置
*        $old_file_name=$upfos -> getName();
*        $old_file_fooder=$upfos -> getExt();
*        $file_size=$upfos -> getSize();
*        $file_name=$upfos -> newName();
*        $upfos -> upload($file_name);
*        $upfos -> thumb("small_",125,120);
*        $new_file_name=$upfos -> UpFile(); $new_file_name 上传后大图名
×        $small_file_name="small_".$new_file_name;  $small_file_name 所略图名
*/
class ieb_upload{
var $FormName; //文件域名称
var $Directroy; //上传至目录
var $MaxSize; //最大上传大小
var $CanUpload; //是否可以上传
var $doUpFile; //上传的文件名
var $sm_File; //缩略图名称
var $Error;  //错误参数

function ieb_upload($formName='', $dirPath='', $maxSize=2097152) //(1024*2)*1024=2097152 就是 2M
{
  global $FormName, $Directroy, $MaxSize, $CanUpload, $Error, $doUpFile, $sm_File;
  //初始化各种参数
  $FormName = $formName;
  $MaxSize = $maxSize;
  $CanUpload = true;
  $doUpFile = '';
  $sm_File = '';
  $Error = 0;
  
  if ($formName == ''){
   $CanUpload = false;
   $Error = 1;
   break;
   }
  
  if ($dirPath == ''){
   $Directroy = $dirPath;
  }else{
   $Directroy = $dirPath.'/';
  }
}

//检查文件是否存在
function scanFile()
{
  global $FormName, $Error, $CanUpload;
  
  if ($CanUpload){
  
   $scan = is_readable($_FILES[$FormName]['name']);
   
   if ($scan){   
    $Error = 2;
   }
   
   return $scan;
  }
}


//获取文件大小
function getSize($format = 'B')
{
  global $FormName, $Error, $CanUpload;
  
  if ($CanUpload){
  
   if ($_FILES[$FormName]['size'] == 0){
    $Error = 3;
    $CanUpload = false;
   }
   
   switch ($format){
   case 'B':
   return $_FILES[$FormName]['size'];
   break;
   
   case 'M':
   return ($_FILES[$FormName]['size'])/(1024*1024);
   }
   
  }
}

//获取文件类型
function getExt()
{
  global $FormName, $Error, $CanUpload;
  
  if ($CanUpload){
   $ext=$_FILES[$FormName]['name'];
   $extStr=explode('.',$ext);
   $count=count($extStr)-1;
  }
  return $extStr[$count];
}

//获取文件名称
function getName()
{
  global $FormName, $CanUpload;
  
  if ($CanUpload){
   return $_FILES[$FormName]['name'];
  }
}

//新建文件名
function newName()
{
  global $CanUpload, $FormName;
  
  if ($CanUpload){
   $FullName=$_FILES[$FormName]['name'];
   $extStr=explode('.',$FullName);
   $count=count($extStr)-1;
   $ext = $extStr[$count];
   
   return date('YmdHis').rand(0,9).'.'.$ext;
  }
}

//上传文件
function upload($fileName = '')
{
  global $FormName, $Directroy, $CanUpload, $Error, $doUpFile;
  
  if ($CanUpload){
   if ($_FILES[$FormName]['size'] == 0){
    $Error = 3;
    $CanUpload = false;
    return $Error;
    break;
   }
  }
  
  if($CanUpload){
  
   if ($fileName == ''){
    $fileName = $_FILES[$FormName]['name'];
   }
      
   $doUpload=@copy($_FILES[$FormName]['tmp_name'], $Directroy.$fileName);
   
   if($doUpload)
   {
    $doUpFile = $fileName;
    chmod($Directroy.$fileName, 0777);
    return true;
   }else{
    $Error = 4;
    return $Error;
   }
  }
}

//创建图片缩略图
function thumb($dscChar='',$width=160,$height=120)
{
  global $CanUpload, $Error, $Directroy, $doUpFile, $sm_File;
  
  if ($CanUpload && $doUpFile != ''){
   $srcFile = $doUpFile;
   
   if ($dscChar == ''){
    $dscChar = 'sm_';
   }
   
   $dscFile = $Directroy.$dscChar.$srcFile;
   $data = getimagesize($Directroy.$srcFile,&$info);
   
   switch ($data[2]) {
   case 1:
   $im = @imagecreatefromgif($Directroy.$srcFile);
   break;
   
   case 2:
   $im = @imagecreatefromjpeg($Directroy.$srcFile);
   break;
   
   case 3:
   $im = @imagecreatefrompng($Directroy.$srcFile);
   break;
   }
   
   $srcW=imagesx($im);
   $srcH=imagesy($im);
   
   if(($srcW/$width)>=($srcH/$height)){
                $temp_height=$height;
                $temp_width=$srcW/($srcH/$height);
                $src_X=abs(($width-$temp_width)/2);
                $src_Y=0;
        }
        else{
                $temp_width=$width;
                $temp_height=$srcH/($srcW/$width);
                $src_X=0;
                $src_Y=abs(($height-$temp_height)/2);
                }
        $temp_img=imagecreatetruecolor($temp_width,$temp_height);
        imagecopyresized($temp_img,$im,0,0,0,0,$temp_width,$temp_height,$srcW,$srcH);
       
       
        $ni=imagecreatetruecolor($width,$height);
        imagecopyresized($ni,$temp_img,0,0,$src_X,$src_Y,$width,$height,$width,$height);
        $cr = imagejpeg($ni,$dscFile);
           chmod($dscFile, 0777);
          
  
   if ($cr){
    $sm_File = $dscFile;
    return true;
   }else{
    $Error = 5;
    return $Error;
   }
  }
}

//显示错误参数
function Err(){
  global $Error;
  return $Error;
}

//上传后的文件名
function UpFile(){
  global $doUpFile, $Error;
  if ($doUpFile != ''){
   return $doUpFile;
  }else{
   $Error = 6;
  }
}

//上传文件的路径
function filePath(){
  global $Directroy, $doUpFile, $Error;
  if ($doUpFile != ''){
   return $Directroy.$doUpFile;
  }else{
   $Error = 6;
  }  
}

//缩略图文件名称
function thumbMap(){
  global $sm_File, $Error;
  if ($sm_File != ''){
   return $sm_File;
  }else{
   $Error = 6;
  }
}

//显示版本信息
function ieb_version(){
  return 'swin img class Ver 0.1';
}
}
?>
php+mysql 图象输入输出


我看了网上的例子~用了~发现图片进数据库没问题~但是关于输出部分总是报错~
代码如下
建库:
CREATE TABLE Images ( PicNum int NOT NULL AUTO_INCREMENT PRIMARY KEY, Image BLOB );
进库:<?php
     $Picture=$_POST[file];   //flie是 我那个图片上传页的表单的传递
         If($Picture != "none")
         { $PSize = filesize($Picture);
         $mysqlPicture = addslashes(fread(fopen($Picture, "r"), $PSize));
         mysql_connect("localhost","root","") or die("Unable to connect to SQL server");
         @mysql_select_db("mymg") or die("Unable to select database");
         mysql_query("INSERT INTO images (image) VALUES ('$mysqlPicture')") or die("Cant Perform Query"); }
         else
         { echo"You did not upload any picture"; }
         ?>
程序到这里都没问题~我用CMD看了下 数据库里也有东西.
输出:
<html>
<body>
<?php
mysql_connect($host,$username,$password) or die("Unable to connect to SQL server");
@mysql_select_db($db) or die("Unable to select database");
$result=mysql_query("SELECT * FROM Images") or die("Cant Perform Query");
While($row=mysql_fetch_object($result))
                { echo "<IMG SRC='Second.php ? PicNum=$row- > PicNum'/>"};!                 ?>
                 </body>
                 </html>
'Second.php:
          <?php
$result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Cant perform Query");
$row=mysql_fetch_object($result);
Header( "Content-type: image/gif");
echo $row->image;
?>

php图片验证码

<?php
//FileName:authimg.php
//Description:
//Creater:alvar
//Createtime:2006-5-4
//Lastmodtime:
session_start();
?>
<?php
//生成验证码图片
Header("Content-type: image/PNG");
srand((double)microtime()*1000000);//播下一个生成随机数字的种子,以方便下面随机数生成的使用
//session_start();//将随机数存入session中
$_SESSION['authnum']="";
$im = imagecreate(90,20) or die("Cant's initialize new GD image stream!");  //制定图片背景大小
$red = ImageColorAllocate($im, 255,0,0); //设定三种颜色
$white = ImageColorAllocate($im, 255,255,255);
$gray = ImageColorAllocate($im, 200,200,200);
//imagefill($im,0,0,$gray); //采用区域填充法,设定(0,0)
imagefill($im,0,0,$white);//ed
//生成数字和字母混合的验证码方法
$ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
$list=explode(",",$ychar);
for($i=0;$i<4;$i++){
  $randnum=rand(0,35);
  $authnum.=$list[$randnum]." ";//ed 加入一个空格
}
//while(($authnum=rand()%100000)<10000); //生成随机的四位数
//将四位整数验证码绘入图片
$_SESSION['authnum']=$authnum;
//int imagestring(resource image,int font,int x,int y,string s, int col)
imagestring($im, 5, 10, 3, $authnum, $red);
//用col颜色将字符串s画到image所代表的图像的x,y座标处(图像的左上角为0,0)。
//如果 font 是 1,2,3,4 或 5,则使用内置字体

for($i=0;$i<400;$i++){ //加入干扰象素 {
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
// imagesetpixel($im, rand()%90 , rand()%30 , $randcolor);
imagesetpixel($im, rand()%90 , rand()%30 , $gray);
}
ImagePNG($im);
ImageDestroy($im);
?>

最近要做学校的项目,为了安全要用到图片验证技术,所以就找了找文章,
肯了些时间,把自己的心得写出来,也算是说下自己的理解吧,
用理解错误的地方请指正,我也是菜菜,
我拿一篇写的不错的文章来分析,或者按照自己的思路来看他的代码.

php图片验证技术关键的是用个函数
imagestring()这个函数,老样子看下函数原型,对理解会有好大的帮助
//int imagestring(resource image,int font,int x,int y,string s, int col);
看下手册会有好多帮助
imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 座标处(图像的左上角为 0, 0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。
这里主要有三个关键参数
resource image,string s ,int col
1,
下面来看看
resource image ,int col
这二个一起分析,为啥,慢慢来看
这个image是划好的图
要划图,要遵循几步
1.1
第一是创建图像文件流
imagecreate()当然用imagecreateturecolor()也可以,
这里用imagecreate来例子,
老方法看函数原型和手册的解释
resource imagecreate ( int x_size, int y_size)
imagecreate() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的空白图像。
那么咱们就可以使用它来创建一个空白图像.
$im=imagecreate(90,30);
1.2
因为是空白的,所以要找给它填充的颜色
用到这个函数
imagecolorallocate()
看原型和手册
int imagecolorallocate ( resource image, int red, int green, int blue)
imagecolorallocate() 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。image 参数是 imagecreate() 函数的返回值。red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF。imagecolorallocate() 必须被调用以创建每一种用在 image 所代表的图像中的颜色。
看下最后一句,imagecolorallocate() 必须被调用以创建每一种用在 image 所代表的图像中的颜色,那么咱们来建立几种颜色,来方便以后的填充,同时这个颜色也是
这里主要有三个关键参数
resource image,string s ,int col
int col 的颜色设置
我们来方便设置三个颜色吧
$red=imagecolorallocate($im,255,0,0);
$white = ImageColorAllocate($im, 255,255,255);
$gray = ImageColorAllocate($im, 200,200,200);
这三个不用解释了吧,就是r g b 配合出来的颜色.
1.3,
既然空白图像和填充颜色已经出来了,那我们来填充吧
用到这个函数
imagefill()
int imagefill ( resource image, int x, int y, int color)
imagefill() 在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。
imagefill($im,0,0,$white);//用白色填充是为了让干扰素更好的起作用
那这样我的三个参数中其中二个参数已经解决了,resource image,int col
我们来看第二个参数string s;

2
第二个参数string s
2,1
因为是验证码,防止恶意攻击,那么一定要设置成随机出来的那样才不会出问题,
srand((double)microtime()*1000000);//播下一个生成随机数字的种子,以方便下面随机数生成的使用,
生成数字和字母混合的验证码
$ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
$list=explode(",",$ychar);//explode函数比较简单,就是提前每个间隔,的字符并把他们组成数组,不理解的看下手册吧,很容易理解的
已经产生了一个包含这36个字符的数组,剩下的就是让他们产生随机的四位数了
for($i=0;$i<4;$i++){
  $randnum=rand(0,35);
  $authnum.=$list[$randnum]." ";//ed 加入一个空格
}
这个循环,循环的次数是四次,我还是在解释下吧,其实很简单,
假设第一次循环,rand(0,35)意思是随机出现0到35之间的数组
假设是第0个,那么就是1 $authnum=1."";
第二次循环
如果$randum=12,那么$authnum=1.$list[$randnum]."";
也就是$authnum=1 C;
如此循环到第四位,
那么就这样产生了随机的四位数,

既然三个参数我们都解决了,那么就可以用
imagestring()函数来创建图片了,
imagestring($im, 5, 10, 3, $authnum, $red);
创建了以后,我们要输出图片
imagepng($im);
imagedestroy($im);
同时我们要在文件头说明,要输出的文件的类型
Header("Content-type: image/PNG");

3
其实功能是实现了,但是为了更好的安全,我们要加入干扰素,
啥是干扰素就是干扰的因素呗,哈
用到这个函数
int imagesetpixel ( resource image, int x, int y, int color)
imagesetpixel() 在 image 图像中用 color 颜色在 x, y 坐标(图像左上角为 0, 0)上画一个点。
看他的解释,在画一个点,所以咱们肯定要用个循环了,
就是多画几个点,哈
for($i=0;$i<400;$i++){ //加入干扰象素
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%90 , rand()%30 , $gray);
}
for循环的第一个,产生随机的颜色,当然也可以使用咱们上面定义的
这里用的就是上面定义的$gray,那个400是产生的像素点的个数
没啥要解释的了吧

只要安装一些第三方的库文件并具有一定的几何知识,就可以利用PHP来创建和处理图像了。利用PHP创建动态图像是相当容易的一件事情。下面,笔者将详细介绍如何实现。

  在使用基本的图像创建函数之前,需要安装GD库文件。如果要使用与JPEG有关的图像创建函数,还需要安装jpeg-6b,如果要在图像中使用Type 1型字体,则必须安装t1lib。

  在建立图像创建环境之前,还需要做一些准备工作。首先,安装t1lib接着安装jpeg-6b,然后再安装GD库文件。在安装时一定要按这里给定的顺序进行安装,因为在编译GD入库时会用到jpeg-6b,如果没有安装jpeg-6b,在编译时就会出错。

  在安装完这三个组件后,还需要重新配置一次PHP,这也是你对采用DSO方式安装PHP感到庆幸的地方之一。运行make clean,然后在当前的配置中添加下面的内容:

  --with-gd=[/path/to/gd]

  --with-jpeg-dir=[/path/to/jpeg-6b]

  --with-t1lib=[/path/to/t1lib]

  完成添加后执行make命令,然后再执行make install命令,重新启动Apache后运行phpinfo()来检查一下新的设置是否生效了。现在,我们就可以开始图像创建工作了。

  根据所安装的GD库文件的版本将决定你是否能创建GIF或PNG格式的图形文件。如果安装的是gd-1.6或以前的版本,可以使用GIF格式的文件但不能创建PNG格式,如果安装的是gd-1.6以后的版本,可以创建PNG文件但不能创建GIF格式的文件。

  创建一幅简单的图像也需要用到许多的函数,我们将一步一步地进行说明。

  在下面的例子中,我们将创建一个PNG格式的图像文件,下面的代码是一个包含所创建的图像的MIME类型的头部:

  <? header ("Content-type: image/png");

  使用ImageCreate()创建一个代表空白图像的变量,这个函数要求以像素为单位的图像大小的参数,其格式是ImageCreate(x_size, y_size)。如果要创建一个大小为250×250的图像,就可以使用下面的语句:

  $newImg = ImageCreate(250,250);

  由于图像还是空白的,因此你可能会希望用一些彩色来填充它。你需要首先使用ImageColorAllocate()函数用其RGB值为这种颜色指定一个名字,这一函数的格式为ImageColorAllocate([image], [red], [green], [blue])。如果要定义天蓝色,可以使用如下的语句:

  $skyblue = ImageColorAllocate($newImg,136,193,255);

  接下来,需要使用ImageFill()函数用这种颜色填充这个图像,ImageFill()函数有几个版本,例如ImageFillRectangle()、ImageFillPolygon()等。为简单起见,我们通过如下的格式使用ImageFill()函数:

  ImageFill([image], [start x point], [start y point], [color])

  ImageFill($newImg,0,0,$skyblue);

  最后,在图像建立后释放图像句柄和所占用的内存:

  ImagePNG($newImg);

  ImageDestroy($newImg); ?>

  这样,创建图像的全部代码如下所示:

  <? header ("Content-type: image/png");

  $newImg = ImageCreate(250,250);

  $skyblue = ImageColorAllocate($newImg,136,193,255);

  ImageFill($newImg,0,0,$skyblue);

  ImagePNG($newImg);

  ImageDestroy($newImg);

  ?>

  如果把这个脚本文件保存为skyblue.php,并用浏览器访问它,我们会看到一个天蓝色的250×250的PNG格式的图像。

  我们还可以使用图像创建函数对图像进行处理,例如把一个较大图像作成一个小图像:

  假设你有一幅图像,想从中裁剪出一个35×35大小的图像。你所需要作的是创建一个35×35大小的空白图像,创建一个包含原来图像的图像流,然后把一个经过调整大小的原来的图像放到新的空白图像中。

  要完成这一任务的关键函数是ImageCopyResized(),它要求的格式如下所示:ImageCopyResized([new image handle],[original image handle],[new image X], [new Image Y], [original image X], [original image Y], [new image X], [new image Y], [original image X], [original image Y])。

  <? /*发送一个头部,以便让浏览器知道该文件所包含的内容类型*/

  header("Content-type: image/png");

  /*建立保存新图像高度和宽度的变量*/

  $newWidth = 35;

  $newHeight = 35;

  /*建立给定高度和宽度的新的空白图像*/

  $newImg = ImageCreate($newWidth,$newHeight);

  /*从原来较大的图像中得到数据*/

  $origImg = ImageCreateFromPNG("test.png");

  /*拷贝调整大小后的图像,使用ImageSX()、ImageSY()得到原来的图像在X、Y方面上的大小*/

  ImageCopyResized($newImg,$origImg,0,0,0,0,$newWidth,$newHeight,ImageSX($origImg),ImageSY($origImg));

  /*创建希望得到的图像,释放内存*/

  ImagePNG($newImg);

  ImageDestroy($newImg); ?>

  如果把这一小段脚本保存为resized.php,然后用浏览器对它进行访问,就会看到一个35×35大小的PNG格式的图像。


<?php
/*
'-##########################################-|
'|     程序设计:(绿竹居)                |
'|     MSN:[email]lzj_zhangjun@hotmail.com[/email]         |
'|     Email:cszjun@gmail.com              |
'|     结合自己以前做的上传和生成缩略和改编一个
'|     老前辈的生成图片水印做成这个                 |
'|     上传+生成缩略图+生成文字水印和图片水印      |
'|     可以直接引用                             |
'-##########################################-|
*/
//审明图片文件夹
$bigfolder="img"
;
$smallfolder="smallimg"
;
//审明文件夹名称 以年月日来建议文件夹
$fdate=date("Ymd"
);
//echo $fdate;
//审明文件名称。以年月日时分秒命名
$fname=date("YmdHis"
);
$bigname="0724e_com_".$fname
;
$smallname="0724e_com_".$fname."_s"
;
//echo $fname."<br/>".$bigname."<br/>".$smallname;
//确定大小文件夹的名称和路经
$bigaddrname=$bigfolder."/".$fdate."/".$bigname
;
$smalladdrname=$smallfolder."/".$fdate."/".$smallname
;
//审明小图片的高度和宽度
$RESIZEWIDTH=180

$RESIZEHEIGHT=150
;
//审明水印的文字或图片的地址及字体的地址
$imgaddr="img.jpg";    
//图片水印
$fontname="www.0724e.com";  
//文字水印
//充许上传的文件扩展名
$exit_name=array(".jpg",".gif",".png"
);
if (isset(
$_POST['Submit'
])){
//上传部分----------------------------
//定议上传名称和上传错误
$upfile=$_FILES['image']['name'
];
$uperror=$_FILES['image']['error'
];
//最简表单验证

switch ($uperror
) {
  case 
1
:
      die(
"<div align="center">上传真过PHP设置充许的最大值<a href="javascript:history.back();">点击返回</a></div>"
);
  break;
  case 
2
:
   die(
"<div align="center">上传超过了表单充许的最大值<a href="javascript:history.back();">点击返回</a></div>"
);
  break; 
  case 
3
:
   die(
"<div align="center">文件只有部分被上传了<a href="javascript:history.back();">点击返回</a></div>"
);
     break;
  case 
4
:
   die(
"<div align="center">文件不有被上传<a href="javascript:history.back();">点击返回</a></div>"
);
     break;
}

//检测扩展是否是充许上传的文件类型
//取得文件扩展名
$exname=strrchr($upfile,"."
);
//判断取得扩展名是否在要求的扩展名内
if(!in_array($exname,$exit_name
))
die(
"<div align="center">文件扩展名不对。只允许上传jpg gif png的图片<a href="javascript:history.back();">点击返回</a></div>"
);

//检测存放图片的目录和子目录是否存在,如果不存在则建目录和子目录,并给目录最大权限777 对LINUX或unix对WINDOWS没必要
//大图
if (!file_exists($bigfolder
)){
  
mkdir($bigfolder,0777
);
  
mkdir($bigfolder."/".$fdate,0777
);
}else{
  if (!
file_exists($bigfolder."/".$fdate
)){
   
mkdir($bigfolder."/".$fdate,0777
);
  }
}
//缩略图
if (!file_exists($smallfolder
)){
  
mkdir($smallfolder,0777
);
  
mkdir($smallfolder."/".$fdate,0777
); 
}else{
  if (!
file_exists($smallfolder."/".$fdate
)){
  
mkdir($smallfolder."/".$fdate,0777
); 
  }
}
//创建目录结束

//得到临时上传的文件
$upfiletmp=$_FILES['image']['tmp_name'
];
//判断临时文件是否存在
if ($uperror==6
)
die(
"<div align="center">找不到临时上传文件,上传失败<a href="javascript:history.back();">点击返回</a></div>"
);

//水印部分==========================================
//水印函数开始============
/**      $groundImage    背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式; 
*      $waterPos       水印位置,有10种状态,0为随机位置; 
*                      1为顶端居左,2为顶端居中,3为顶端居右; 
*                      4为中部居左,5为中部居中,6为中部居右; 
*                      7为底端居左,8为底端居中,9为底端居右; 
*      $waterImage     图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式; 
*      $waterText      文字水印,即把文字作为为水印,支持ASCII码,不支持中文; 
*      $textFont       文字大小,值为1、2、3、4或5,默认为5; 
*      $textColor      文字颜色,值为十六进制颜色值,默认为#FF0000(红色); 
* */

function imageWaterMark($groundImage,$waterPos=0,$waterImage="",$waterText=""$textFont=5,$textColor="#FF0000"


    
$isWaterImage FALSE

    
$formatMsg "暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。"


    
//读取水印文件 
    
if(!empty($waterImage) && file_exists($waterImage
)) { 
        
$isWaterImage TRUE

        
$water_info getimagesize($waterImage
); 
        
$water_w    $water_info[0];
//取得水印图片的宽 
        
$water_h    $water_info[1];
//取得水印图片的高 

        
switch($water_info[2])  {   
//取得水印图片的格式  
            
case 1:$water_im imagecreatefromgif($waterImage
);break; 
            case 
2:$water_im imagecreatefromjpeg($waterImage
);break; 
            case 
3:$water_im imagecreatefrompng($waterImage
);break; 
            default:die(
$formatMsg
); 
        } 
    } 

    
//读取背景图片 
    
if(!empty($groundImage) && file_exists($groundImage
)) { 
        
$ground_info getimagesize($groundImage
); 
        
$ground_w    $ground_info[0];
//取得背景图片的宽 
        
$ground_h    $ground_info[1];
//取得背景图片的高 

        
switch($ground_info[2]) {   
//取得背景图片的格式  
            
case 1:$ground_im imagecreatefromgif($groundImage
);break; 
            case 
2:$ground_im imagecreatefromjpeg($groundImage
);break; 
            case 
3:$ground_im imagecreatefrompng($groundImage
);break; 
            default:die(
$formatMsg
); 
        } 
    } else { 
        die(
"需要加水印的图片不存在!"
); 
    } 

    
//水印位置 
    
if($isWaterImage) { 
//图片水印  
        
$w $water_w

        
$h $water_h

        
$label "图片的"

    } else {  
//文字水印 
        
$temp imagettfbbox(ceil($textFont*2.5),0,"./cour.ttf",$waterText);
//取得使用 TrueType 字体的文本的范围 
        
$w $temp[2] - $temp[6
]; 
        
$h $temp[3] - $temp[7
]; 
        unset(
$temp
); 
        
$label "文字区域"

    } 
    if( (
$ground_w<$w) || ($ground_h<$h
) ) { 
        echo 
"需要加水印的图片的长度或宽度比水印".$label."还小,无法生成水印!"

        return; 
    } 
    switch(
$waterPos
) { 
        case 
0:
//随机 
            
$posX rand(0,($ground_w $w
)); 
            
$posY rand(0,($ground_h $h
)); 
            break; 
        case 
1:
//1为顶端居左 
            
$posX 0

            
$posY 0

            break; 
        case 
2:
//2为顶端居中 
            
$posX = ($ground_w $w) / 2

            
$posY 0

            break; 
        case 
3:
//3为顶端居右 
            
$posX $ground_w $w

            
$posY 0

            break; 
        case 
4:
//4为中部居左 
            
$posX 0

            
$posY = ($ground_h $h) / 2

            break; 
        case 
5:
//5为中部居中 
            
$posX = ($ground_w $w) / 2

            
$posY = ($ground_h $h) / 2

            break; 
        case 
6:
//6为中部居右 
            
$posX $ground_w $w

            
$posY = ($ground_h $h) / 2

            break; 
        case 
7:
//7为底端居左 
            
$posX 0

            
$posY $ground_h $h

            break; 
        case 
8:
//8为底端居中 
            
$posX = ($ground_w $w) / 2

            
$posY $ground_h $h

            break; 
        case 
9:
//9为底端居右 
            
$posX $ground_w $w

            
$posY $ground_h $h

            break; 
        default:
//随机 
            
$posX rand(0,($ground_w $w
)); 
            
$posY rand(0,($ground_h $h
)); 
            break;     
    } 

    
//设定图像的混色模式 
    
imagealphablending($ground_imtrue
); 

    if(
$isWaterImage) { 
//图片水印 
        
imagecopy($ground_im$water_im$posX$posY00$water_w,$water_h);
//拷贝水印到目标文件         
    
} else {
//文字水印
        
if( !empty($textColor) && (strlen($textColor)==7
) ) { 
            
$R hexdec(substr($textColor,1,2
)); 
            
$G hexdec(substr($textColor,3,2
)); 
            
$B hexdec(substr($textColor,5
)); 
        } else { 
            die(
"水印文字颜色格式不正确!"
); 
        } 
        
imagestring $ground_im$textFont$posX$posY$waterTextimagecolorallocate($ground_im$R$G$B
));         
    } 

    
//生成水印后的图片 
    
@unlink($groundImage
); 
    switch(
$ground_info[2]) {
//取得背景图片的格式 
        
case 1:imagegif($ground_im,$groundImage
);break; 
        case 
2:imagejpeg($ground_im,$groundImage
);break; 
        case 
3:imagepng($ground_im,$groundImage
);break; 
        default:die(
$errorMsg
); 
    } 

    
//释放内存 
    
if(isset($water_info)) unset($water_info
); 
    if(isset(
$water_im)) imagedestroy($water_im
); 
    unset(
$ground_info
); 
    
imagedestroy($ground_im
); 

//水印函数完


//存在则移动完在上传
$goodupfile=@move_uploaded_file($upfiletmp,$bigaddrname.$exname
);
if (!
$goodupfile
){
die(
"<div align="center">上传图片失败<a href="javascript:history.back();">点击返回</a></div>"
);
}else{ 
  
//文字水印 
    
imageWaterMark($bigaddrname.$exname,5,"",$fontname,5,"#FF0000"
); 

    
//图片水印 
    //imageWaterMark($bigaddrname.$exname,5,$imgaddr); 
//结束水印部分===================================
    

//缩略图部分------------------------------------------------------------
//判断缩略图大小函数-----
    
function ResizeImage($im,$maxwidth,$maxheight,$name
){ 
    
$width imagesx($im
); 
    
$height imagesy($im
); 
    if((
$maxwidth && $width $maxwidth) || ($maxheight && $height $maxheight
)){ 
        if(
$maxwidth && $width $maxwidth
){ 
            
$widthratio $maxwidth/$width

            
$RESIZEWIDTH=true

        } 
        if(
$maxheight && $height $maxheight
){ 
            
$heightratio $maxheight/$height

            
$RESIZEHEIGHT=true

        } 
        if(
$RESIZEWIDTH && $RESIZEHEIGHT
){ 
            if(
$widthratio $heightratio
){ 
                
$ratio $widthratio

            }else{ 
                
$ratio $heightratio

            } 
        }elseif(
$RESIZEWIDTH
){ 
            
$ratio $widthratio

        }elseif(
$RESIZEHEIGHT
){ 
            
$ratio $heightratio

        } 
        
$newwidth $width $ratio

        
$newheight $height $ratio

        if(
function_exists("imagecopyresampled"
)){ 
              
$newim imagecreatetruecolor($newwidth$newheight
); 
              
imagecopyresampled($newim$im0000$newwidth$newheight$width$height
); 
        }else{ 
            
$newim imagecreate($newwidth$newheight
); 
              
imagecopyresized($newim$im0000$newwidth$newheight$width$height
); 
        } 
        
ImageJpeg ($newim,$smalladdrname.$name.".jpg"
); 
        
ImageDestroy ($newim
); 
    }else{ 
        
ImageJpeg ($im,$smalladdrname.$name.".jpg"
); 
    } 
    } 
    
//生成部分
    
if($_FILES['image']['size'
]){ 
    if(
$_FILES['image']['type'] == "image/pjpeg"
){ 
        
$im imagecreatefromjpeg($bigaddrname.$exname
); 
    }elseif(
$_FILES['image']['type'] == "image/x-png"
){ 
        
$im imagecreatefrompng($bigaddrname.$exname
); 
    }elseif(
$_FILES['image']['type'] == "image/gif"
){ 
        
$im imagecreatefromgif($bigaddrname.$exname
); 
    } 
    if(
$im
){ 
        if(
file_exists($smalladdrname.".jpg"
)){ 
            
unlink($smalladdrname.".jpg"
); 
        } 
        
ResizeImage($im,$RESIZEWIDTH,$RESIZEHEIGHT,$smalladdrname
); 
        
ImageDestroy ($im
); 
    } 
    }
    echo 
"<div align='center'><a href='javascript:window.history.back()'>上传成功</a></div>"
;
}
//缩略图结束----------------------------------------------------- 
  
}
?>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
  <input type="file" name="image" />
  <input type="hidden" name="MAX_FILE_SIZE" value="<?=1024*100?>">
  <input type="submit" name="Submit" value="上传图片" />
</form>

[!--infotagslink--]

相关文章

  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • 微信小程序二维码生成工具 weapp-qrcode详解

    这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25
  • php二维码生成

    本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
  • Java生成随机姓名、性别和年龄的实现示例

    这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • 微信小程序 网络请求(GET请求)详解

    这篇文章主要介绍了微信小程序 网络请求(GET请求)详解的相关资料,需要的朋友可以参考下...2016-11-22
  • C#生成随机数功能示例

    这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 微信小程序自定义tabbar组件

    这篇文章主要为大家详细介绍了微信小程序自定义tabbar组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • php生成唯一数字id的方法汇总

    关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
  • jQuery为动态生成的select元素添加事件的方法

    下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
  • 微信小程序(应用号)开发新闻客户端实例

    这篇文章主要介绍了微信小程序(应用号)开发新闻客户端实例的相关资料,需要的朋友可以参考下...2016-10-25
  • Python爬取微信小程序通用方法代码实例详解

    这篇文章主要介绍了Python爬取微信小程序通用方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-29
  • 微信小程序 页面跳转传递值几种方法详解

    这篇文章主要介绍了微信小程序 页面跳转传递值几种方法详解的相关资料,需要的朋友可以参考下...2017-01-16