问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

我这有个已经实现了php上传图片的功能的类,但是现在还要给上传的每张图...

发布网友 发布时间:2022-04-23 00:14

我来回答

3个回答

热心网友 时间:2022-04-22 10:14

给你一个封装的图片处理的类吧!包含缩放和剪切功能!
构造方法只需要传递图片所在路径即可!对应方法及参数都有注释!
请给予最佳答案!!
<?php
class Img{
private $path;
//构造方法,初始化图片信息
function __construct($path='./imgs/'){
$this->path=rtrim($path,'/').'/';
}
/**
* 对图片进行缩放
* 参数对应:文件名 缩放后宽度 缩放后高度 缩放后图片名前缀
*/
function thumb($name,$width,$height,$pre="th_"){
if(file_exists($this->path.$name)){
$imgInfo=$this->getInfo($name);
$img=$this->getImg($name,$imgInfo);
$newSize=$this->getNewSize($name,$width,$height,$imgInfo);
$newImg=$this->getNewInfo($img,$newSize,$imgInfo);
return $this->createNewImage($newImg, $pre.$name, $imgInfo);
}else{
echo '图片'.$this->path.$name.'不存在,请检查文件名及路径是否填写正确';
}
}
//辅助图片处理,获取图片的宽、高、类型属性
private function getInfo($name){
$temp=getImageSize($this->path.$name);
$imgInfo['width']=$temp[0];
$imgInfo['height']=$temp[1];
$imgInfo['type']=$temp[2];
return $imgInfo;
}
//辅助图片处理,获取创建的图片资源
private function getImg($name,$imgInfo){
$src=$this->path.$name;
switch($imgInfo['type']){
case 1:
$img=imagecreatefromgif($src);
break;
case 2:
$img=imagecreatefromjpeg($src);
break;
case 3:
$img=imagecreatefrompng($src);
break;
}
return $img;
}
//辅助图片处理,获取创建的图片资源
private function getNewSize($name,$width,$height,$imgInfo){
$newSize['width']=$imgInfo['width'];
$newSize['height']=$imgInfo['height'];
if($width<$imgInfo['width']){
$newSize['width']=$width;
}
if($height<$imgInfo['height']){
$newSize['height']=$height;
}
if($imgInfo["width"]*$newSize["width"] > $imgInfo["height"] * $newSize["height"]){
$newSize["height"]=round($imgInfo["height"]*$newSize["width"]/$imgInfo["width"]);
}else{
$newSize["width"]=round($imgInfo["width"]*$newSize["height"]/$imgInfo["height"]);
}
print_r($newSize);
return $newSize;
}
//辅助图片处理,获取缩放的图片资源
private function getNewInfo($img,$newSize,$imgInfo){
$newImg=imagecreatetruecolor($newSize['height'],$newSize['height']);
$otsc=imagecolortransparent($img);
if($otsc >=0 && $otsc <= imagecolorstotal($img)){
$tran=imagecolorsforindex($img, $otsc);
$newt=imagecolorallocate($newImg, $tran["red"], $tran["green"], $tran["blue"]);
imagefill($newImg, 0, 0, $newt);
imagecolortransparent($newImg, $newt);
}
imagecopyresized($newImg, $img, 0, 0, 0, 0, $newSize["width"], $newSize["height"], $imgInfo["width"], $imgInfo["height"]);
imagedestroy($img);
return $newImg;

}
//辅助图片处理,创建新的图片
private function createNewImage($newImg, $newName, $imgInfo){
switch($imgInfo["type"]){
case 1://gif
$result=imageGif($newImg, $this->path.$newName);
break;
case 2://jpg
$result=imageJPEG($newImg, $this->path.$newName);
break;
case 3://png
$return=imagepng($newImg, $this->path.$newName);
break;
}
imagedestroy($newImg);
return $newName;
}

/**
* 对图片加水印
* 参数对应:需水印图片 水印图片 加水印后图片名前缀
*/
function waterMark($name,$wname,$pre="wa_"){
if(file_exists($this->path.$name)){
if(file_exists($this->path.$wname)){
$info=$this->getInfo($name);
$winfo=$this->getInfo($wname);
if($p=$this->getPosition($info,$winfo)){
$img=$this->getImg($name,$info);
$wImg=$this->getImg($wname,$winfo);
imagecopy($img, $wImg, $p["x"], $p["y"], 0, 0, $winfo["width"], $winfo["height"]);
imagedestroy($wImg);
return $this->createNewImage($img,$pre.$name,$info);
}else{
echo '水印图片尺寸大于原图片尺寸';
}
}else{
echo '水印图片'.$this->path.$wname.'不存在,请检查文件名及路径是否填写正确';
}
}else{
echo '图片'.$this->path.$name.'不存在,请检查文件名及路径是否填写正确';
}
}
//辅助图片处理,获取水印图片应处坐标
private function getPosition($info,$winfo){
if($info['width']<$winfo['width']||$info['height']<$winfo['height']){
return false;
}
$x=$info['width']-$winfo['width'];
$y=$info['height']-$winfo['height'];
return array('x'=>$x,'y'=>$y);
}
/**
* 图片剪切函数
* 对应参数:原图片 X坐标 Y坐标 宽度 高度
*/
function cut($name,$x,$y,$width,$height,$pre='cx_'){
$imgInfo=$this->getInfo($name);
$img=$this->getImg($name,$imgInfo);
$newImg=imagecreatetruecolor($width,$height);
imagecopyresampled($newImg,$img,0,0,$x,$y,$width,$height,$width,$height);
return $this->createNewImage($newImg, $pre.$name, $imgInfo);
}

}

热心网友 时间:2022-04-22 11:32

热心网友 时间:2022-04-22 13:07

水印?
百度
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 江苏省公务员考试分数怎么算 江苏省公务员考试分几类?都考些什么? python新手代码问题? 职工数据包括:职工号、职工姓名、性别、年龄、工龄、工资、地址,为其定义结构类 型,采用结构体数组编 江苏公务员考试试题有哪些类型 python 中有个winfo_name方法,winfo的英文代表啥意思 江苏省公务员考试一年考几次? Python中的winfo_windth和winfo_reqwidth的区别是什么? 如何辨别nike zoom winfo 5真假? 江苏省公务员考试时间在什么时候?考试时间有多久? “你好”用英文怎么说? “你好”用英文怎么说? 你好,的英语怎么说? 你好的英语怎么说 请问,你好的英语怎么说啊 你好,用英语怎么说? 你好用英语怎么说? “你好”用英语怎么说? 你好用英文怎么说呢? 苹果手机打开微信时需要密码怎么设置? 江苏公务员考试省考考什么? python tk怎样调整一个button控件和Entry控件在界面的位置 江苏公务员考试时间 python中tkinter的复杂逻辑判断语句怎么实现呀? 江苏省公务员考试B类和A类从题型上有什么区别! xp框架,多任务悬浮窗口怎么用求教 Python tkinter中,怎么做一个透明的悬浮窗口(无边框和标题栏)_百度知 ... 玉米须和玉米一起煮后玉米须能吃吗? 煮玉米上面的玉米须可以吃吗?有人说是药材? 老玉米须子煮的水能喝吗?老玉米煮的水能喝吗?有什么功效? 玉米须和玉米一起煮后玉米须能吃吗 能不能借个QQ号来 qq邮箱里显示我老公借贷款是怎么回事 玉米须能吃下去吗 玉米上的须能吃吗? 玉米须可以直接吃到肚子里吗 玉米须能吃吗? 玉米须可以煮水食用吗? 玉米须可以吃吗?煮汤或煲饭后. 煮熟了的玉米须可以泡水喝吗