本文在学习PHP100的基础上,提高代码的适用兼容性,封装一部分常用功能。
下面的代码并没有完全封装,只是做成了类的形式,为的就是给各位留出更多自定义函数如返回产生图片名称、路径、大小,新图片的名称等的位置,方面开发自己的类。
下面是代码:注释充分,无须解释!
代码
<?php
/*
* Created on 2010-10-27
* BY��QQ542900563
* Copyrights Reserved 2000-2020
* 本例演示图片水、缩略图的生成办法
*/
//定义参数:
$old="liu.jpg";//要修改的图
$water="m.png";//水印图
$Max_W=600;//照片的最大宽度
$Max_H=400;//照片的最大高度
$Min_W=100;//缩略图宽
$Min_H=80;//缩略图高
//分别载入两张图片
$im=imagecreatefromjpeg($old);
$img2=imagecreatefrompng($water);
//取得各自的长宽,计算位置
$im_WH=getimagesize($old);
$im_W=$im_WH[0];
$im_H=$im_WH[1];
$img2_WH=getimagesize($water);
$img2_W=$img2_WH[0];
$img2_H=$img2_WH[1];
//定义存放的位置
$NewX=$im_W-$img2_W;
$NewY=$im_H-$img2_H;
//填充水印
imagecopy($im,$img2,$NewX,$NewY,0,0,$img2_W,$img2_H);
//控制图片大小并生成缩略图
//1.计算大图像生成标准图像和缩略图的宽高
$New_W=0;//标准图像的宽
$New_H=0;//标准图像的高
$New_M_W=0;//缩略图的宽
$New_M_H=0;//缩略图的高
if($im_W>$Max_W||$im_H>$Min_H)
{
if($im_W/$im_H>=$Max_W/$Max_H)
{
$New_W=$Max_W;
$New_H=$Max_H*$im_W/$im_H;
$New_M_W=$Min_W;
$New_M_H=$Min_H*$im_W/$im_H;
}else
{
$New_H=$Max_H;
$New_W=$Max_H*$im_W/$im_H;
$New_M_H=$Min_H;
$New_M_W=$Min_H*$im_W/$im_H;
}
}else
{
$New_W=$im_W;
$New_H=$im_H;
if($im_W/$im_H>=$Max_W/$Max_H)
{
$New_M_W=$Min_W;
$New_M_H=$Min_H*$im_W/$im_H;
}else
{
$New_M_H=$Min_H;
$New_M_W=$Min_H*$im_W/$im_H;
}
}
//2.生成标准大图
$Standard_img=imagecreatetruecolor($New_W,$New_H);
imagecopyresized ( $Standard_img, $im, 0,0,0,0, $New_W, $New_H, $im_W, $im_H );
imagejpeg($Standard_img,"New".$old); //在原图后面加上New作为输出文件名
//3.生成缩略图
$Thumbnail_img=imagecreatetruecolor($New_M_W,$New_M_H);
imagecopyresized($Thumbnail_img,$im,0,0,0,0,$New_M_W,$New_M_H,$im_W,$im_H);
imagejpeg($Thumbnail_img,"Thumb".$old);
//header("Content-type:image/jpeg");
//imagejpeg($im);
?>