이 글은 주로 이미지 처리를 위한 PHP 코드 구현 방법을 소개합니다. 관심 있는 친구들이 참고하시면 좋겠습니다.
1. 이미지 스케일링 코드
비균등 비율 이미지 스케일링 코드
$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');로그인 후 복사
균등 비율 이미지 스케일링(투명 색상 처리 추가)
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');로그인 후 복사
II. 이미지 자르기 코드
그림 자르기
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');로그인 후 복사
사진을 자르고 자른 사진을 확대/축소하세요. 동일한 비율의 이미지 크기 조정(즉, 이미지의 일부를 복사하고 크기를 조정하는 것)이 아닙니다. imagecopyreized() — 이미지의 일부를 복사하고 크기를 조정합니다
imagecopyresampled() — 이미지의 일부를 복사하여 크기를 조정하는 리샘플
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. 사진 워터마크: 텍스트 워터마크 및 이미지 워터마크 코드
사진과 텍스트 워터마크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,'./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');로그인 후 복사
사진과 이미지 워터마크
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. 이미지 회전 코드
이미지 회전 리소스 imagerotate() — 주어진 각도로 이미지를 회전하고 새 리소스를 반환
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로그인 후 복사
5. 그림 뒤집기
그림을 Y축으로 뒤집습니다. 즉, 왼쪽과 오른쪽을 바꿉니다
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('./images/hee.jpg','./images/hee11.jpg');로그인 후 복사
그림을 따라 x축을 뒤집는 것은 위아래로 바꾸는 것을 의미합니다
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');로그인 후 복사
6. 그림 선명하게 하기
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");로그인 후 복사
이미지 선명화(분석 원리)(원본 이미지를 먼저 색상을 얻은 다음 원본 이미지의 색상을 선명하게 하고 마지막으로 선명해진 색상을 원본 이미지에 할당)
#解析开始:
#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');로그인 후 복사
相关推荐:
위 내용은 이미지를 처리하기 위해 PHP 코드를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!