设为首页 收藏本站
查看: 1041|回复: 0

[经验分享] php学习笔记(十六)图片的处理缩放、旋转、透明、锐化、翻转、裁剪

[复制链接]

尚未签到

发表于 2017-4-14 08:53:58 | 显示全部楼层 |阅读模式
<?php
/**
* 图片处理
* 缩放、旋转、透明、锐化、翻转、裁剪
*
* 一、创建资源
$imagejpg = imagecreatefromjpeg($jpg);
$imagepng = imagecreatefrompng($png);
$imagegif = imagecreatefromgif($gif);
* 二、获取图片的属性
*         imagesx(resource)
*         imagesy(resource)
*         
*         getimagesize(filename)
*         
* 三、缩放thum()
*         自己实现的imagecopyresampled方法
*         可以加入判断图片格式,然后做不同的缩放,一万年设计了图名处理
*
* 四、透明处理thum()
*         png、jpeg透明色都是正常的,只有gif的处理之后透明色不正常
*         imagecolortransparent()将某个颜色指定为透明色
*         imagecolorstotal()判断颜色是否在调色板的颜色上
*         imagecolorsforindex()
*
* 五、图片的裁剪
*         imagecopyresampled
*         imagecopyresized
*
* 六、加水印(文字水印、图片水印)
*         imagettftext
*         imagecopy
*
* 七、图片的旋转
*         imagerotate
*
* 八、图片的翻转(水平、垂直)
*         imagecopy
*
* 九、锐化
*         //获取某个像素的颜色索引值
*         imagecolorat($image, $x, $y);
*         //根据索引值取出数组
*         imagecolorsforindex($image, $index);
*/

//图片的基本修改
$jpg = "image/b.jpg";
$png = "image/c.png";
$gif = "image/a.gif";
$imagejpg = imagecreatefromjpeg($jpg);
$imagepng = imagecreatefrompng($png);
$imagegif = imagecreatefromgif($gif);
$green = imagecolorallocate($imagejpg, 0, 255, 0);
imageline($imagejpg, 0, 0, 111, 111, $green);
//输出宽度和高度
echo "imagejpg width:".imagesx($imagejpg)."height:".imagesy($imagejpg)."<br>";
echo "imagepng width:".imagesx($imagepng)."height:".imagesy($imagepng)."<br>";
echo "imagegif width:".imagesx($imagegif)."height:".imagesy($imagegif)."<br>";
//返回图片信息(宽、高、类型等)
$arr = getimagesize($jpg);
var_dump($arr);
//保存更改后的图片
imagejpeg($imagejpg,"image/jpg.jpg");
imagepng($imagepng,"image/png.jpg");
imagegif($imagegif,"image/gif.gif");
//释放资源
imagedestroy($imagejpg);
imagedestroy($imagepng);
imagedestroy($imagegif);
//缩放图片50%
$filename =  "image/b.jpg";
$per = 0.5;
list($width,$height) = getimagesize($filename);
$n_w = $width*$per;
$n_h = $height*$per;
$new = imagecreatetruecolor($n_w, $n_h);
$img = imagecreatefromjpeg($filename);
//拷贝原图片到新图片,并设置宽高
imagecopyresized($new, $img, 0, 0, 0, 0, $n_w, $n_h, $width, $height);
//等比例缩放
imagejpeg($new,"image/new.jpg");
//资源释放
imagedestroy($new);
imagedestroy($img);

$filename =  "image/a.gif";
/**
* 等比例缩放
* @param 源 $res
* @param 缩放后的最大宽 $width
* @param 缩放后的最大高 $height
* @param 目标 $new
*/
function thum($res,$width,$height,$newname){
list($s_w,$s_h) = getimagesize($res);
if ($width && ($s_w < $s_h)) {
$width = ($height / $s_h) * $s_w;
} else {
$height = ($width / $s_w) * $s_h;
}
$newfile = imagecreatetruecolor($width, $height);
$img = imagecreatefromgif($res);
$otsc = imagecolortransparent($img);
//如果存在透明色
if ($otsc>=0 && $otsc < imagecolorstotal($img)){
//查找索引颜色的值
$tran = imagecolorsforindex($img, $otsc);
//去除透明色的背景颜色
$newcolor = imagecolorallocate($newfile, $tran["red"], $tran["green"], $tran["blue"]);
imagefill($newfile, 0, 0, $newcolor);
//将新图片的地方指定透明色
imagecolortransparent($newfile,$newcolor);
}
//开始拷贝,透明色的时候用imagecopyresized才没有雪花
imagecopyresized($newfile, $img, 0, 0, 0, 0, $width, $height, $s_w, $s_h);
imagegif($newfile,$newname);
imagedestroy($img);
imagedestroy($newfile);
}
thum($filename, 100, 200, "image/thum.gif");
/**
* 裁剪图片
* @param 源 $res
* @param 从源的x哪里开始裁剪 $c_x
* @param 从源的y哪里开始裁剪 $c_y
* @param 裁剪的宽度 $c_w
* @param 裁剪的高度 $c_h
* @param 目标 $newname
*/
$filename =  "image/b.jpg";
function cut($res,$c_x,$c_y,$c_w,$c_h,$newname){
$img = imagecreatefromjpeg($res);
$new = imagecreatetruecolor($c_w, $c_h);
imagecopyresized($new, $img, 0, 0, $c_x, $c_y, $c_w, $c_h, $c_w, $c_h);
imagejpeg($new,$newname);
imagedestroy($img);
imagedestroy($new);
}
cut($filename, 12, 12, 50, 50, "image/cut.jpg");
/**
* 设置文字水印
* @param 源 $res
* @param 文字 $text
* @param 设置文字位置x $x
* @param 设置文字位置y $y
* @param 设置新图片的名字 $newname
*/
function mark_text($res,$text,$x,$y,$newname){
$img = imagecreatefromjpeg($res);
$color = imagecolorallocate($img, 0, 255, 0);
$text = iconv("GB2312","UTF-8", $text);
imagettftext($img, 20, 0, $x, $y, $color, "../ADOBESONGSTD-LIGHT.OTF", $text);
imagejpeg($img,$newname);
imagedestroy($img);
}
mark_text($filename, "我操", 51, 53,"image/mark_text.jpg");
/**
* 设置图片水印
* @param 源 $res
* @param 图片水印 $text
* @param 设置文字位置x $x
* @param 设置文字位置y $y
* @param 设置新图片的名字 $newname
*/
function mark_pic($res,$pic,$x,$y,$newname){
$img = imagecreatefromjpeg($res);
$water = imagecreatefromjpeg($pic);
$w_w = imagesx($water);
$w_h = imagesy($water);
//将图片拷贝到另一个图片之上
imagecopy($img, $water, $x, $y, 0, 0, $w_w, $w_h);
imagejpeg($img,$newname);
imagedestroy($water);
imagedestroy($img);
}
mark_pic($filename, "image/new.jpg", 51, 53,"image/mark_pic.jpg");
/**
* 旋转角度
* @param 文件源 $res
* @param 旋转角度 $angle
* @param 新颜色的背景颜色 $bgd_color
* @param 生成新图片的名字 $newname
*/
function rotate($res,$angle,$bgd_color,$newname){
$img = imagecreatefromjpeg($res);
$new = imagerotate($img, $angle, $bgd_color);
imagejpeg($new,$newname);
imagedestroy($img);
}
rotate($filename, 45, 0, "image/rotate.jpg");
$filename =  "image/b.jpg";
/**
* 图片的翻转
* @param 源 $res
* @param 新文件名字 $newname
* @param 翻转的中心轴 $axle
*/
function turn($res,$newname,$axle="x"){
$img = imagecreatefromjpeg($res);
$i_w = imagesx($img);
$i_h = imagesy($img);
$newfile = imagecreatetruecolor($i_w, $i_h);
if ($axle=="y"){
for ($i = 0; $i < $i_w; $i++) {
imagecopy($newfile, $img, $i_w-$i-1, 0, $i, 0, 1, $i_h);
}
}else{
for ($i = 0; $i < $i_h; $i++) {
imagecopy($newfile, $img, 0, $i_h-$i-1, 0, $i, $i_w, 1);
}
}
imagejpeg($newfile,$newname);
imagedestroy($img);
imagedestroy($newfile);
}
turn($filename,"image/turn_y.jpg","y");
turn($filename,"image/turn_x.jpg");
/**
* 锐化操作
* @param 源 $res
* @param 新文件名字 $newname
* @param 锐化程度 $degree
*/
function sharp($res,$newname,$degree){
$img = imagecreatefromjpeg($res);
$newfile = imagecreatefromjpeg($res);
$i_w = imagesx($img);
$i_h = imagesy($img);
for ($i = 1; $i < $i_w; $i++) {
for ($j = 1; $j < $i_h; $j++) {
$b_c1 = imagecolorsforindex($img, imagecolorat($img, $i-1, $j-1));
$b_c2 = imagecolorsforindex($img, imagecolorat($img, $i, $j));
$r = intval($b_c2["red"]+$degree*($b_c2["red"]-$b_c1["red"]));
$g = intval($b_c2["green"]+$degree*($b_c2["green"]-$b_c1["green"]));
$b = intval($b_c2["blue"]+$degree*($b_c2["blue"]-$b_c1["blue"]));
//限制在0到255之间
$r = min(255,max($r,0));
$g = min(255,max($g,0));
$b = min(255,max($b,0));
if (($d_clr = imagecolorexact($newfile, $r, $g, $b))==-1){
$d_clr = imagecolorexact($newfile, $r, $g, $b);
}
imagesetpixel($newfile, $i, $j, $d_clr);
}
}
imagejpeg($newfile,$newname);
imagedestroy($img);
imagedestroy($newfile);
}
sharp($filename, "image/sharp.jpg", 2);
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-364704-1-1.html 上篇帖子: 用php处理百万级以上的数据提高查询速度的方法 下篇帖子: felayman——PHP与JQuery利用JSON交互时候的JSON.parse()解析问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表