Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie PHP-Code zur Verarbeitung von Bildern

So implementieren Sie PHP-Code zur Verarbeitung von Bildern

墨辰丷
墨辰丷Original
2018-05-16 11:59:532747Durchsuche

In diesem Artikel wird hauptsächlich die Implementierung von PHP-Code zur Verarbeitung von Bildern vorgestellt. Ich hoffe, dass er für alle hilfreich ist.

1. Bildskalierungscode

Nichtproportionaler Bildskalierungscode

$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');

Isometrische Bildskalierung (und Hinzufügen transparenter Farbverarbeitung)

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[&#39;red&#39;],$trans[&#39;green&#39;],$trans[&#39;blue&#39;]);
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(&#39;./images/map.gif&#39;,200,200,&#39;./images/map2.gif&#39;);





2. Bildzuschnittcode

Bildzuschnitt

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(&#39;./images/hee.jpg&#39;,52, 47, 345, 330,&#39;./images/hee4.jpg&#39;);
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(&#39;./images/hee.jpg&#39;,52, 47, 345, 330,&#39;./images/hee8.jpg&#39;);



Bild zuschneiden und das zugeschnittene Bild skalieren, anstatt das Bild proportional zu skalieren (d. h. einen Teil des Bildes kopieren und seine Größe ändern) imagecopyresized() – einen Teil des Bildes kopieren und seine Größe ändern

imagecopyresampled() – Teil der Bildkopie erneut abtasten und in der Größe ändern

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(&#39;./images/hee.jpg&#39;,52, 47, 345, 330,200,200,&#39;./images/hee10.jpg&#39;);





Drei, Textwasserzeichen zum Bild hinzufügen: Textwasserzeichen und Bildwasserzeichencode

Textwasserzeichen zum Bild hinzufügen
function 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,&#39;./font/msyh.ttf&#39;,$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(&#39;gb2312&#39;,&#39;utf-8&#39;,&#39;细说PHP&#39;);
//mark_text(&#39;./images/hee.jpg&#39;,150,250,$text,&#39;./images/hee5.jpg&#39;);


Bildwasserzeichen zu Bildern hinzufügen

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(&#39;./images/hee.jpg&#39;,50,200,&#39;./images/gaolf.gif&#39;,&#39;./images/hee6.jpg&#39;);





4. Bildrotationscode
Bildrotationsressource imagerotate( ) – Drehen Sie das Bild um einen bestimmten Winkel und geben Sie neue Ressourcen zurück
5. Drehen Sie das Bild um

Drehen Sie das Bild entlang der Y-Achse, also nach links und rechts

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(&#39;./images/hee.jpg&#39;,360,&#39;images/hee10.jpg&#39;); //90 180 270 360




Das Bild entlang der x-Achse zu spiegeln bedeutet, es nach oben und unten zu vertauschen

function 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(&#39;./images/hee.jpg&#39;,&#39;./images/hee11.jpg&#39;);



6. Bildschärfung
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(&#39;./images/hee.jpg&#39;,&#39;./images/hee12.jpg&#39;);






Bildschärfung (analytisches Prinzip) (erhalten Sie zuerst die Farbe des Originalbilds und schärfen Sie dann die Farbe des Originalbildes und weisen Sie schließlich die geschärfte Farbe dem Originalbild zu)



#解析开始:
#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(&#39;./images/hee.jpg&#39;,50,&#39;./images/hee16.jpg&#39;);

相关推荐:

JS的图片处理与合成详解

JavaScript关于图片处理与合成的方法详解

PHP进行批量图片处理时程序执行超时

Das obige ist der detaillierte Inhalt vonSo implementieren Sie PHP-Code zur Verarbeitung von Bildern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn