PHPで画像シャープコードを実現
3483 ワード
//読取画像の種類 //1 = GIF 2 = JPG、 3 = PNG、 4 = SWF 5 = PSD 6 = BMP 7 = TIFF(intel) byte order) 8 = TIFF(motorola) byte order) 9 = JPC、 10 = JP 2, 11 = JPX 12 = JB 2、 13 = SWC 14 = IF 機能 GetImageType($filename) {return (($imgifo=@getimagesize($filename)!null ? $imgifo[2] : null); //画像のシャープ化 //scr_im:画像リソースハンドル、degree:シャープ化度数 機能 Sharp(&$src_im &$dst_im $degree { $srcusx = イマジクス($src_)im) $srcusy = イマジジ($src_)im) //$dst_im = imagcreate($srcu)x, $srcusy): //イメージコピー($dst_)im $srcusim 0, 0, 0, 0, $srcusx, $srcusy): $cnt = 0; for ($x=1; $x<$src_x; $x++) for ($y=1; $y<$srcuy; $y++) { $srcusclr 1 = イマジcolors forindex($src_)im イマジコlorat($srcu)im $x-1, $y-1) $srcusclr 2 = イマジcolors forindex($src_)im イマジコlorat($srcu)im $x, $y); $r = intval($src_)clr 2[[red]+$degree*($src_]clr 2[red]-$clr 1[red]); $g = intval($src_)clr 2[[green]+$degree*($src_]clr 2[green]-$src_clr 1[green]); $b = intval($src_)clr 2[blue]+$degree*($src_)clr 2[blue]-$srcuclr 1[blue] $r = min(255, max($r、 0)) $g = min(255, max($g、 0)) $b = min(255, max($b) 0)) //echo "r:$r g:$g b:$b
if (($dst_clr=imagcolorexact($dst_)im $r, $g, $b)===-1) $dst_clr = Imagecolorallate($dst_)im $r, $g, $b): $cnt++; if ($dst_clr==-1) ディエ allocate faile at。 $x, $y ($cnt.「;」 imagset pixel($dst_)im $x, $y, $dst_clr「clr」 } return $dst_im; ) $ImageFunctions = array(「imagcreatefrowbmp」、 "イメージクリエティーfroomgif「 "イメージクリエティーfrom jpeg”、 "イメージクリエティーfrome"); if (!empty($uPOST["ImageName") { settime_limit(10*60) if (($ImageType=GetImageType($u)POST["ImageName")==false] die(指定ファイルが存在しないか、有効でないか、またはタイプをサポートしていないか!) if ($ImageType==6) $ImageType = 0; if ($ImageType>3) die(「サポートされていない画像タイプ!」) $im 1 = $ImageFuntions[$ImageType]($uPOST["ImageName]] $im 2 = $ImageFuntions[$ImageType]($uPOST["ImageName]] //printr(imagcolors forindex($im) イメージカラー($im、 10, 10)) Sharp($im 1) $im 2, $_POST["Degree"); ヘader(「Conttentt-type: イメージ イメージアップ($im 2) imagdestroy($im 1) imagdestroy($im 2) ) ?> <フォームm name=「FormName」 action=「」 method=「post」 画像のローカルパスまたはURLを入力してください:
<input name=「ImageName」 type=「text」 value="<?=>_POST["ImageName"?>" size=32>
シャープ化度数(例:0.6、3.0):
<input name=「Degree」 type=「text」 value="<?=>_POST["Degree"?><>br/> <input type=「submit」 value=「提出」 変更しました。$imを節約しました。 機能 Sharp 2(&$im、 $degree { $cnt = 0; for ($x=imagsx($im)-1 $x>0 $x--) for ($y=imagsy($im)-1 $y>0 $y--) { $clr 1 = imagcolors forindex($im) イメージカラー($im、 $x-1, $y-1) $clr 2 = imagcolors forindex($im) イメージカラー($im、 $x, $y); $r = intval($clr 2["red]+$degree*($clr 2["red]-$clr 1["red]))); $g = intval($clr 2[[green]]+$degree*($clr 2["green]-$clr 1["green])); $b = intval($clr 2[[blue]]+$degree*($clr 2["blue]-$clr 1["blue"))); $r = min(255, max($r、 0)) $g = min(255, max($g、 0)) $b = min(255, max($b) 0)) //echo "r:$r g:$g b:$b
if (($new_clr=imagcolorexact($im) $r, $g, $b)===-1) $new_clr = Imagecolorallate($im) $r, $g, $b): $cnt++; if ($new_clr==-1) ディエ allocate faile at。 $x, $y ($cnt.「;」 imagset pixel($im) $x, $y, $new_clr「clr」 } )
if (($dst_clr=imagcolorexact($dst_)im $r, $g, $b)===-1) $dst_clr = Imagecolorallate($dst_)im $r, $g, $b): $cnt++; if ($dst_clr==-1) ディエ allocate faile at。 $x, $y ($cnt.「;」 imagset pixel($dst_)im $x, $y, $dst_clr「clr」 } return $dst_im; ) $ImageFunctions = array(「imagcreatefrowbmp」、 "イメージクリエティーfroomgif「 "イメージクリエティーfrom jpeg”、 "イメージクリエティーfrome"); if (!empty($uPOST["ImageName") { settime_limit(10*60) if (($ImageType=GetImageType($u)POST["ImageName")==false] die(指定ファイルが存在しないか、有効でないか、またはタイプをサポートしていないか!) if ($ImageType==6) $ImageType = 0; if ($ImageType>3) die(「サポートされていない画像タイプ!」) $im 1 = $ImageFuntions[$ImageType]($uPOST["ImageName]] $im 2 = $ImageFuntions[$ImageType]($uPOST["ImageName]] //printr(imagcolors forindex($im) イメージカラー($im、 10, 10)) Sharp($im 1) $im 2, $_POST["Degree"); ヘader(「Conttentt-type: イメージ イメージアップ($im 2) imagdestroy($im 1) imagdestroy($im 2) ) ?> <フォームm name=「FormName」 action=「」 method=「post」 画像のローカルパスまたはURLを入力してください:
<input name=「ImageName」 type=「text」 value="<?=>_POST["ImageName"?>" size=32>
シャープ化度数(例:0.6、3.0):
<input name=「Degree」 type=「text」 value="<?=>_POST["Degree"?><>br/> <input type=「submit」 value=「提出」 変更しました。$imを節約しました。 機能 Sharp 2(&$im、 $degree { $cnt = 0; for ($x=imagsx($im)-1 $x>0 $x--) for ($y=imagsy($im)-1 $y>0 $y--) { $clr 1 = imagcolors forindex($im) イメージカラー($im、 $x-1, $y-1) $clr 2 = imagcolors forindex($im) イメージカラー($im、 $x, $y); $r = intval($clr 2["red]+$degree*($clr 2["red]-$clr 1["red]))); $g = intval($clr 2[[green]]+$degree*($clr 2["green]-$clr 1["green])); $b = intval($clr 2[[blue]]+$degree*($clr 2["blue]-$clr 1["blue"))); $r = min(255, max($r、 0)) $g = min(255, max($g、 0)) $b = min(255, max($b) 0)) //echo "r:$r g:$g b:$b
if (($new_clr=imagcolorexact($im) $r, $g, $b)===-1) $new_clr = Imagecolorallate($im) $r, $g, $b): $cnt++; if ($new_clr==-1) ディエ allocate faile at。 $x, $y ($cnt.「;」 imagset pixel($im) $x, $y, $new_clr「clr」 } )