php☞图片操作
水印图片
- 水印图
- before:
- after
代码片段
class Water
{
/**
* 生成水印图
* @param $src_im [增加的水印图片创建一块画布]
* @param $water_im[水印图片创建一块画布]
* @return resource
*/
function apply_full_water($src_im, $water_im)
{
$width = imagesx($src_im);
$height = imagesy($src_im);
$water_w = imagesx($water_im);
$water_h = imagesy($water_im);
$im = imagecreatetruecolor($width, $height);
imagecopy($im, $src_im, 0, 0, 0, 0, $width, $height);
imagecopyresampled($im, $water_im, 0, 0, 0, 0, $width, $height, $water_w, $water_h);
return $im;
}
function setType($typeArr,$srcImg)
{
switch ($typeArr) {
case "png":
$src_im = imagecreatefrompng($srcImg);
break;
case "jpeg":
$src_im = imagecreatefromjpeg($srcImg);
break;
case "gif":
$src_im = imagecreatefromgif($srcImg);
break;
default:
$src_im = imagecreatefromjpeg($srcImg);
break;
}
return $src_im;
}
}
$srcImg = "./UI001AP2414-001.jpg";
$waterImg = "./water.png";
$srctype= explode(".", $srcImg);
$watertype = explode(".",$waterImg);
$water = new Water();
$src_im = $water->setType($srctype[2],$srcImg);
$water_im = $water->setType($watertype[2],$waterImg);
$im = $water->apply_full_water($src_im,$water_im);
imagepng($im, "./".date("ymd").rand(1,1000).".".$srctype[2]);
//注:水印图片生成到当前目录 命名为当前年月日+1到1000随机数
压缩图片(比如原始图8M压缩后成666KB)
最后结果:
- before:
- after:
代码片段
class img
{
/**
* @function 等比缩放函数(以保存的方式实现)
* @param string $picname 被缩放的处理图片源
* @param int $maxX 缩放后图片的最大宽度
* @param int $maxY 缩放后图片的最大高度
* @param string $pre 缩放后图片名的前缀名
* @return string 返回后的图片名称(带路径),如a.jpg --> s_a.jpg
*/
function scalePic($picname,$maxX=100,$maxY=100,$pre='s_')
{
$info = getimagesize($picname); //获取图片的基本信息
$width = $info[0];//获取宽度
$height = $info[1];//获取高度
//判断图片资源类型并创建对应图片资源
$im = $this->getPicType($info[2],$picname);
//计算缩放比例
$scale = ($maxX/$width)>($maxY/$height)?$maxY/$height:$maxX/$width;
//计算缩放后的尺寸
$sWidth = floor($width*$scale);
$sHeight = floor($height*$scale);
//创建目标图像资源
$nim = imagecreatetruecolor($sWidth,$sHeight);
//等比缩放
imagecopyresampled($nim,$im,0,0,0,0,$sWidth,$sHeight,$width,$height);
//输出图像
$newPicName = $this->outputImage($picname,$pre,$nim);
//释放图片资源
imagedestroy($im);
imagedestroy($nim);
return $newPicName;
}
/**
* function 判断并返回图片的类型(以资源方式返回)
* @param int $type 图片类型
* @param string $picname 图片名字
* @return 返回对应图片资源
*/
function getPicType($type,$picname)
{
$im=null;
switch($type)
{
case 1: //GIF
$im = imagecreatefromgif($picname);
break;
case 2: //JPG
$im = imagecreatefromjpeg($picname);
break;
case 3: //PNG
$im = imagecreatefrompng($picname);
break;
case 4: //BMP
$im = imagecreatefromwbmp($picname);
break;
default:
die("不认识图片类型");
break;
}
return $im;
}
/**
* function 输出图像
* @param string $picname 图片名字
* @param string $pre 新图片名前缀
* @param resourse $nim 要输出的图像资源
* @return 返回新的图片名
*/
function outputImage($picname,$pre,$nim)
{
$info = getimagesize($picname);
$picInfo = pathInfo($picname);
$newPicName = $picInfo['dirname'].'/'.$pre.$picInfo['basename'];//输出文件的路径
switch($info[2])
{
case 1:
imagegif($nim,$newPicName);
break;
case 2:
imagejpeg($nim,$newPicName);
break;
case 3:
imagepng($nim,$newPicName);
break;
case 4:
imagewbmp($nim,$newPicName);
break;
}
return $newPicName;
}
}
$srcImg = "./UI001AP2414-001.jpg";
$result = (new img())->scalePic($srcImg,1000,1000,"s_");
var_dump($result);die;
//注:输出结果 string(23) "./s_UI001AP2414-001.jpg"
附:img类 https://github.com/adminwangyaofeng/test/blob/master/Img