Maison > Article > développement back-end > Comment implémenter du code php pour traiter les images
Cet article présente principalement comment implémenter du code php pour traiter les images. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
1. Code de mise à l'échelle de l'image
Code de mise à l'échelle de l'image non proportionnelle
$fileNames='./images/hee.jpg'; list($s_w,$s_h)=getimagesize($fileNames); $per=0.3; $n_w=$s_w*$per; $n_h=$s_h*$per; $s_img=imagecreatefromjpeg($fileNames); $n_img=imagecreatetruecolor($n_w,$n_h); imagecopyresized($n_img,$s_img,0,0,0,0,$n_w,$n_h,$s_w,$s_h); header("Content-Type:image/jpeg"); imagejpeg($n_img,'./images/hee2.jpg'); imagedestroy($n_img); imagedestroy($s_img); function sf($backgroung,$bl,$location){ list($width,$height)=getimagesize($backgroung); $n_w=$width*$bl; $n_h=$height*$bl; $s_img=imagecreatefromjpeg($backgroung); $n_img=imagecreatetruecolor($n_w,$n_h); imagecopyresized($n_img,$s_img,0,0,0,0,$n_w,$n_h,$width,$height); header("Content-Type:image/jpeg"); imagejpeg($n_img,$location); imagedestroy($s_img); imagedestroy($n_img); } //sf('./images/hee.jpg',0.3,'./images/hee9.jpg');
Mise à l'échelle de l'image isométrique (et ajout d'un traitement des couleurs transparent)
function imagesf($backgroung,$n_w,$n_h,$newFiles){ list($s_w,$s_h,$imagetype)=getimagesize($backgroung); //等比例缩放固定算法 if ($n_w && ($s_w < $s_h)) { $n_w = ($n_h / $s_h) * $s_w; } else { $n_h = ($n_w / $s_w) * $s_h; } if($imagetype==2){ $s_img=imagecreatefromjpeg($backgroung); }elseif($imagetype==3){ $s_img=imagecreatefrompng($backgroung); }elseif($imagetype==1){ $s_img=imagecreatefromgif($backgroung); }else{ echo "php 不支持这中图片类型!!"; } $n_img=imagecreatetruecolor($n_w,$n_h); //取得原图形的索引 $img_index=imagecolortransparent($s_img); //判断原图形索引是否在图形调色板的数目范围内(调色板数目 0~255); if($img_index>=0 && $img_index<imagecolorstotal($s_img)){ //返回一个具有 red,green,blue 和 alpha 的键名的关联数组,包含了指定颜色索引的相应的值 $trans=imagecolorsforindex($s_img,$img_index); //print_r($trans); Array ( [red] => 255 [green] => 255 [blue] => 255 [alpha] => 127 ) //取原图的颜色,给新图分配颜色 $n_color=imagecolorallocate($n_img,$trans['red'],$trans['green'],$trans['blue']); imagefill($n_img,0,0,$n_color); //把获取到的颜色,设置为新图的透明色 imagecolortransparent($n_img,$n_color); } //imagecopyresampled($n_img,$s_img,0,0,0,0,$n_w,$n_h,$s_w,$s_h); if(imagetypes()& IMG_JPG){ header("Content-Type:image/jpeg"); imagejpeg($n_img,$newFiles); }elseif(imagetypes()& IMG_PNG){ header("Content-Type:image/png"); imagepng($n_img,$newFiles); }elseif(imagetypes()& IMG_GIF){ header("Content-Type:image/gif"); imagegif($n_img,$newFiles); }else{ echo "php 不支持这中图片类型!!"; } imagedestroy($s_img); imagedestroy($n_img); } imagesf('./images/map.gif',200,200,'./images/map2.gif');
2. Code de recadrage d'image
Image recadrage
function imagecut($backgroung,$cut_x,$cut_y,$cut_width,$cut_hight,$fileNames){ list(,,$imagetype)=getimagesize($backgroung); if($imagetype==1){ $s_img=imagecreatefromgif($backgroung); }elseif($imagetype==2){ $s_img=imagecreatefromjpeg($backgroung); }elseif($imagetype==2){ $s_img=imagecreatefrompng($backgroung); }else{ echo "php 不支持这种图片类型!!"; } $n_img=imagecreatetruecolor($cut_width,$cut_hight); imagecopyresized($n_img,$s_img,0,0,$cut_x,$cut_y,$cut_width,$cut_hight,$cut_width,$cut_hight); if(imagetypes() & IMG_GIF){ header("Content-Type:image/gif"); imagegif($n_img,$fileNames); }elseif(imagetypes() & IMG_JPG){ header("Content-Type:image/jpeg"); imagejpeg($n_img,$fileNames); }elseif(imagetypes() & IMG_PNG){ header("Content-Type:image/png"); imagepng($n_img,$fileNames); }else{ echo "php 不支持这种图片类型!!"; } } //imagecut('./images/hee.jpg',52, 47, 345, 330,'./images/hee4.jpg'); function cut($backgroung,$x,$y,$cut_width,$cut_hight,$location){ $s_img=imagecreatefromjpeg($backgroung); $n_img=imagecreatetruecolor($cut_width,$cut_hight); imagecopy($n_img,$s_img,0,0,$x,$y,$cut_width,$cut_hight); header("Content-Type:image/jpeg"); imagejpeg($n_img,$location); imagedestroy($s_img); imagedestroy($n_img); } //cut('./images/hee.jpg',52, 47, 345, 330,'./images/hee8.jpg');
Recadrez l'image et redimensionnez l'image recadrée, sans redimensionner l'image proportionnellement (en copiant une partie de l'image et en la redimensionnant) imagecopyresized() — copie une partie de l'image et en la redimensionnant
imagecopyresampled() — rééchantillonne et redimensionne une partie de l'image
function cutsf($backgroung,$x,$y,$cut_width,$cut_hight,$n_w,$n_h,$location){ $s_img=imagecreatefromjpeg($backgroung); $n_img=imagecreatetruecolor($n_w,$n_h); imagecopyresized($n_img,$s_img,0,0,$x,$y,$n_w,$n_h,$cut_width,$cut_hight); header("Content-Type:image/jpeg"); imagejpeg($n_img,$location); imagedestroy($s_img); imagedestroy($n_img); } cutsf('./images/hee.jpg',52, 47, 345, 330,200,200,'./images/hee10.jpg');
3. Ajouter un filigrane de texte à l'image : filigrane de texte et code de filigrane d'image
Ajouter un filigrane de texte à l'imagefunction mark_text($backgroung,$x,$y,$text,$fileNames){ list(,,$imagetype)=getimagesize($backgroung); if($imagetype == 1){ $s_img=imagecreatefromgif($backgroung); }elseif($imagetype == 2){ $s_img=imagecreatefromjpeg($backgroung); }elseif($imagetype == 3){ $s_img=imagecreatefrompng($backgroung); } $green=imagecolorallocate($s_img,0,255,0); imagettftext($s_img,20,0,$x,$y,$green,'./font/msyh.ttf',$text); if(imagetypes() & IMG_GIF){ header("Content-Type:image/gif"); imagegif($s_img,$fileNames); }elseif(imagetypes() & IMG_JPG){ header("Content-Type:image/jpeg"); imagejpeg($s_img,$fileNames); }elseif(imagetypes() & IMG_PNG){ header("Content-Type:image/png"); imagepng($s_img,$fileNames); } imagedestroy($s_img); } $text=iconv('gb2312','utf-8','细说PHP'); //mark_text('./images/hee.jpg',150,250,$text,'./images/hee5.jpg');
Ajouter un filigrane d'image à l'image
function mark_pic($backgroung,$x,$y,$waterpic,$fileNames){ $s_img=imagecreatefromjpeg($backgroung); $waterpic_img=imagecreatefromgif($waterpic); $waterpic_w=imagesx($waterpic_img); $waterpic_h=imagesy($waterpic_img); imagecopy( $s_img, $waterpic_img, $x,$y, 0,0, $waterpic_w,$waterpic_h); header("Content-Type:image/jpeg"); imagejpeg($s_img,$fileNames); imagedestroy($s_img); imagedestroy($waterpic_img); } //mark_pic('./images/hee.jpg',50,200,'./images/gaolf.gif','./images/hee6.jpg');
4. Code de rotation de l'image
Picture Rotate resource imagerotate() — Fait pivoter l'image selon l'angle donné, renvoyant une nouvelle ressource
function imagexz($backgroung,$angle,$location){ $s_img=imagecreatefromjpeg($backgroung); $n_img=imagerotate($s_img,$angle,0); header("Content-Type:image/jpeg"); imagejpeg($n_img,$location); imagedestroy($s_img); imagedestroy($n_img); } imagexz('./images/hee.jpg',360,'images/hee10.jpg'); //90 180 270 360
>
Retourner l'image le long de l'axe des x signifie l'échanger de haut en basfunction turn_y($backgroung,$newFiles){ $s_img=imagecreatefromjpeg($backgroung); $width=imagesx($s_img); $height=imagesy($s_img); $n_img=imagecreatetruecolor($width,$height); for( $x=0; $x<$width; $x++ ){ imagecopy($n_img,$s_img, $width-$x-1,0, $x,0, 1,$height); } header("Content-Type:image/jpeg"); imagejpeg($n_img,$newFiles); imagedestroy($s_img); imagedestroy($n_img); } //turn_y('./images/hee.jpg','./images/hee11.jpg');
6. Netteté de l'image
function turn_x($backgroung,$newFiles){ $s_img=imagecreatefromjpeg($backgroung); $width=imagesx($s_img); $height=imagesy($s_img); $n_img=imagecreatetruecolor($width,$height); for( $y=0; $y<$height; $y++ ){ imagecopy($n_img,$s_img, 0,$height-$y-1, 0,$y, $width,1); } header("Content-Type:image/jpeg"); imagejpeg($n_img,$newFiles); imagedestroy($s_img); imagedestroy($n_img); } //turn_x('./images/hee.jpg','./images/hee12.jpg');
function sharp($background, $degree, $save){ $back=imagecreatefromjpeg($background); $b_x=imagesx($back); $b_y=imagesy($back); $dst=imagecreatefromjpeg($background); for($i=$b_x-1; $i>0; $i--){ for($j=$b_y-1; $j>0; $j--){ $b_clr1=imagecolorsforindex($back, imagecolorat($back, $i-1, $j-1)); $b_clr2=imagecolorsforindex($back, imagecolorat($back, $i, $j)); $r=intval($b_clr2["red"]+$degree*($b_clr2["red"]-$b_clr1["red"])); $g=intval($b_clr2["green"]+$degree*($b_clr2["green"]-$b_clr1["green"])); $b=intval($b_clr2["blue"]+$degree*($b_clr2["blue"]-$b_clr1["blue"])); $r=min(255, max($r, 0)); $g=min(255, max($g, 0)); $b=min(255, max($b, 0)); if(($d_clr=imagecolorexact($dst, $r, $g, $b))==-1){ $d_clr=Imagecolorallocate($dst, $r, $g, $b); } imagesetpixel($dst, $i, $j, $d_clr); } } imagejpeg($dst, $save); imagedestroy($back); imagedestroy($dst); } sharp("./images/hee.jpg", 20, "./images/hee15.jpg");
Netteté de l'image (principe d'analyse) (obtenir d'abord le couleur de l'image originale, puis accentuer la couleur de l'image originale, et enfin attribuer la couleur accentuée à l'image originale)
根据解决在写一遍图片锐化代码 相关推荐:#解析开始:
#1 创建要锐化的图片资源
#eg:$s_img=imagecreatefromjpeg('./images/hee.jpg');
#2 获取图片资源的宽、高,创建两层循环(外层控制宽 内层控制高) 对每一个像素进行锐化
#eg:$width=imagesx($s_img);
# $height=imagesy($s_img);
# for($i=$width-1; $i>0; $i--){
# for($j=$height-1; $j>0; $j--){
#
# }
# }
#3 在内层循环里对每一个像素颜色进行锐化(写在内层循环):
#3.1 用函数$color=imagecolorsforindex()取得图片索引的颜色,即取得当前颜色和取得上一个颜色
#eg: $s_img_color1=imagecolorsforindex($s_img , imagecolorat($s_img , $i-1, $j-1));//上一个颜色
# $s_img_color2=imagecolorsforindex($s_img , imagecolorat($s_img , $i, $j));//当前颜色
#3.2 固定算法对取得的颜色进行锐化 比如锐化20:$degree=20
#eg:$r=intval($color["red"]+$degree*($color["red"]-$color["red"]));
# $g=intval($s_img_color2["green"]+$degree*($s_img_color2["green"]-$s_img_color1["green"]));
# $b=intval($s_img_color2["blue"]+$degree*($s_img_color2["blue"]-$s_img_color1["blue"]));
#3.3 把取得的RGB颜色控制在0~255正常范围内
#$r=min(255, max($r, 0));
#$g=min(255, max($g, 0));
#$b=min(255, max($b, 0));
#4 把锐化后的每一个像素颜色重新赋给原图的每一个像素颜色(写在内层循环)
#4.1 取得锐化后颜色的索引:$rh_color
#eg:if( ($rh_color=imagecolorexact($s_img,$r,$g,$b)) ==-1){
# $rh_color=imagecolorallocate($s_img,$r,$g,$b);
# }
#4.2 把锐化后的每一个像素颜色重新赋给原图的每一个像素颜色
eg:imagesetpixel($s_img, $i, $j, $rh_color);
#5 保存图片资源(写在循环外)
#eg:imagejpeg($s_img'./images/hee16.jpg');
#6 关闭图片资源(写在循环外)
#eg:imagedestroy($s_img);
#解析结束
function sharp($background, $degree, $location){
#step 1 创建图片资源
$s_img=imagecreatefromjpeg($background);
#step 2 获取图片资源的宽高
$b_x=imagesx($s_img);
$b_y=imagesy($s_img);
#step 3 两层循环进行锐化 外层控制宽 内层控制高
for( $i=$b_x-1; $i>0; $i-- ){
for( $j=$b_y-1; $j>0; $j-- ){
#step 4 取得图片索引的颜色:当前颜色和上一个颜色
$s_img_color1=imagecolorsforindex($s_img, imagecolorat($s_img, $i-1, $j-1));
$s_img_color2=imagecolorsforindex($s_img, imagecolorat($s_img, $i, $j));
#step 5 固定算法对取得的颜色进行锐化
$r=intval($s_img_color2["red"]+$degree*($s_img_color2["red"]-$s_img_color1["red"]));
$g=intval($s_img_color2["green"]+$degree*($s_img_color2["green"]-$s_img_color1["green"]));
$b=intval($s_img_color2["blue"]+$degree*($s_img_color2["blue"]-$s_img_color1["blue"]));
#step 6 把取得的RGB颜色控制在0~255正常范围内
$r=min(255, max($r, 0));
$g=min(255, max($g, 0));
$b=min(255, max($b, 0));
#step 7 取得锐化后颜色的索引
if( ($d_clr=imagecolorexact($s_img,$r,$g,$b)) ==-1){
$d_clr=imagecolorallocate($s_img,$r,$g,$b);
}
#step 8 把锐化后的颜色重新赋给图片资源的每一个像素
imagesetpixel($s_img, $i, $j, $d_clr);
}
}
imagejpeg($s_img,$location);
imagedestroy($s_img);
}
sharp('./images/hee.jpg',50,'./images/hee16.jpg');
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!