ゼロから始めるPHP一行 (18) 畫像処理
1. 既存の畫像を開く
<?phpheader("Content-type:image/jpeg"); $img=imagecreatefromjpeg("cc.jpg");imagejpeg($img);imagedestroy($img);?>
関數(shù)imagecreatefromjpeg()のパラメータはファイルへのパスであり、戻り値は、パラメータが指す畫像のリソース識別子です。この機(jī)能は、元の畫像自體を単に開くのではなく、既存の畫像を使用して新しい畫像を作成します。畫像拡張子名 .jpg を強(qiáng)制的に .png に変更した場合、imagecreatefrompng()関數(shù)を使用しても畫像は jpg 形式のままのためファイルを開くことができません。
2. 畫像の関連屬性を取得します。
<?php$img=imagecreatefromjpeg("cc.jpg");$x=imagesx($img);$y=imagesy($img);echo "圖片cc.jpg的寬為:<b>$x</b> pixels";echo "<br/>";echo "<br/>";echo "圖片cc.jpg的高為:<b>$y</b> pixels";?>
さらに、畫像のサイズは関數(shù) getimagesize() を通じて取得できます。 GD ライブラリおよびその他の関連屬性に屬さない場合、この関數(shù)の構(gòu)文は次のとおりです:
array getimagesize(string $filename [, array &imageinfo])
<?php$img_info=getimagesize("cc.jpg");for($i=0;$i<4;++$i){ echo $img_info[$i]; echo "<br/>"; }?>
3 番目の要素は畫像形式であり、その値の意味は次のとおりです。
1: 畫像が GIF 形式であることを示します
2:畫像は JPG 形式であることを示します
3: 畫像が PNG 形式であることを示します
4: 畫像が SWF 形式であることを示します
5: 畫像が SWF 形式であることを示しますPSD 形式
6: 畫像が BMP 形式であることを示します
<?php$pic_name="ee.png";$pic_size=getimagesize($pic_name);?><img src="<?php echo $pic_name; ?>"<?php echo $pic_size[3]; ?>>
3. 畫像に透かし効果を追加します
?ウォーターマークを追加する畫像の幅と高さの値を取得
?畫像のサイズがウォーターマークの文字サイズを満たしているかを確認(rèn)
?ウォーターマーク効果の位置を決定畫像
?畫像の混色モードを設(shè)定します
?透かし効果を生成します
?リソースを解放します
<?php function makeimagewatermark($image,$pos,$water_text,$font_size,$color){ $font_type="c://WINDOWS//Fonts//SIMYOU.TTF"; if(!empty($image)&& file_exists($image)) { $img_info=getimagesize($image); $g_w=$img_info[0]; $g_h=$img_info[1]; switch($img_info[2]) { case 1: $img=imagecreatefromgif($image); break; case 2: $img=imagecreatefromjpeg($image); break; case 3: $img=imagecreatefrompng($image); break; default: die("Format Wrong"); } } else { die("Not exists!"); } $temp=imagettfbbox(ceil($font_size*2.5),0,$font_type,$water_text); $w=$temp[2]-$temp[6]; $h=$temp[3]-$temp[7]; if(($g_w<$w) || ($g_h<$h)) { echo "Too small!"; return; } switch($pos){ case 0: $pos_x=rand(0,($g_w-$w)); $pos_y=rand(0,($g_h-$h)); break; case 1: $pos_x=0; $pos_y=0; break; case 2: $pos_x=($g_w-$w)/2; $pos_y=($g_h-$h)/2; break; case 3: $pos_x=$g_w-$w; $pos_y=$g_h-$h; break; default: $pos_x=rand(0,($g_w-$w)); $pos_y=rand(0,($g_h-$h)); break; } imagealphablending($img,true);//設(shè)置圖像混色模式 if(!empty($color) && (strlen($color)==7)){ $R=hexdec(substr($color,1,2)); $G=hexdec(substr($color,3,2)); $B=hexdec(substr($color,5)); } else { die("Format wrong!"); } $text_color=imagecolorallocate($img,$R,$G,$B); imagettftext($img,$font_size,0,$pos_x,$pos_y,$text_color,$font_type,$water_text); switch($img_info[2]) { case 1 : imagegif($img,$image); break; case 2 : imagejpeg($img,$image); break; case 3: imagepng($img,$image); break; default: die("Formate unSupport!"); } imagedestroy($img); }if(isset($_FILES) && !empty($_FILES['userfile'])&& $_FILES['userfile']['size']>0){$uploadfile="./".time()."_".$_FILES['userfile']['name'];if(copy($_FILES['userfile']['tmp_name'],$uploadfile)){ makeimagewatermark($uploadfile,2,"Photo by Mac",16,"#43042A"); echo "<img src=\"".$uploadfile."\" border=\"0\">"; }else{ echo "uploadWrong!<br/>"; }}?><html><head><title>19.9.php</title></head><body><form enctype="multipart/form-data" method="POST">選擇上傳圖片:<input name="userfile" type="file"><input type="submit" value="上傳"></form></body></html>
4. 既存の畫像のサムネイルを生成します
<?php header("Content-type:image/jpeg");$img_name="cc.jpg";$src_img=imagecreatefromjpeg($img_name);$ow=imagesx($src_img);$oh=imagesy($src_img);$nw=round($ow*200.0/$ow);$nh=round($oh*200.0/$oh);$desc_img=imagecreate($nw,$nh);imagecopyresized($desc_img,$src_img,0,0,0,0,$nw,$nh,$ow,$oh);imagejpeg($desc_img);imagedestroy($desc_img);imagedestroy($src_img);?>
最初のパラメータと 2 番目のパラメータは、それぞれターゲット畫像と元の畫像の識別子です。ターゲット畫像とオリジナル畫像のコピー位置 最後の 4 つのパラメータは、ターゲット畫像とオリジナル畫像のコピー領(lǐng)域の幅と高さです。
! ! imagecopyresampled() 関數(shù)を使用する >