PHP中实现图片的锐化

一直想留出来啊

一直想留出来啊

2016-01-29 15:02

PHP中实现图片的锐化,PHP中实现图片的锐化
 

  <?

  //读取图像的类型

  //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 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF

  function GetImageType($filename) {return (($imginfo=@getimagesize($filename))!=null ? $imginfo[2] : null);}   

  //图像锐化

  //$scr_im:图像资源句柄,$degree:锐化度数

  function Sharp(&$src_im, &$dst_im, $degree)

  {

   $src_x = imagesx($src_im);

   $src_y = imagesy($src_im);

   //$dst_im = imagecreate($src_x, $src_y);

   //imagecopy($dst_im, $src_im, 0, 0, 0, 0, $src_x, $src_y);

   $cnt = 0;

   for ($x=1; $x<$src_x; $x++)

   for ($y=1; $y<$src_y; $y++)

   {

   $src_clr1 = imagecolorsforindex($src_im, imagecolorat($src_im, $x-1, $y-1));

   $src_clr2 = imagecolorsforindex($src_im, imagecolorat($src_im, $x, $y));

   $r = intval($src_clr2["red"]+$degree*($src_clr2["red"]-$src_clr1["red"]));

   $g = intval($src_clr2["green"]+$degree*($src_clr2["green"]-$src_clr1["green"]));

   $b = intval($src_clr2["blue"]+$degree*($src_clr2["blue"]-$src_clr1["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<br/";

   if (($dst_clr=imagecolorexact($dst_im, $r, $g, $b))==-1)

   $dst_clr = Imagecolorallocate($dst_im, $r, $g, $b);

   $cnt++;

   if ($dst_clr==-1) die("color allocate faile at $x, $y ($cnt).");

   imagesetpixel($dst_im, $x, $y, $dst_clr);

   }

   return $dst_im;

  }   

  $ImageFunctions = array("imagecreatefromwbmp", "imagecreatefromgif", "imagecreatefromjpeg", "imagecreatefrompng");  

  if (!empty($_POST["ImageName"]))

  { 

   set_time_limit(10*60);

   if (($ImageType=GetImageType($_POST["ImageName"]))==false)

   die("指定文件不存在或不是有效的图片或不支持类型!");

   if ($ImageType==6) $ImageType = 0;

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/php/)

   if ($ImageType3) die("不支持的图片类型!");

   $im1 = $ImageFunctions[$ImageType]($_POST["ImageName"]);

   $im2 = $ImageFunctions[$ImageType]($_POST["ImageName"]);

   //print_r(imagecolorsforindex($im, imagecolorat($im, 10, 10)));

   Sharp($im1, $im2, $_POST["Degree"]);

   header("Content-type: image/png");

   imagepng($im2);

   imagedestroy($im1);

   imagedestroy($im2);

  } 

  ?

  <form name="FormName" action="" method="post"

  请输入图片的本地路径或URL:<br/

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/php/)

  <input name="ImageName" type="text" value="<?=$_POST["ImageName"]?" size=32<br/

  锐化度数(例:0.6、3.0):<br/

  <input name="Degree" type="text" value="<?=$_POST["Degree"]?"<br/

  <input type="submit" value="提交"

  </form 

   改了一下,省了一个$im:  

   function Sharp2(&$im, $degree)

  {

   $cnt = 0;

   for ($x=imagesx($im)-1; $x0; $x--)

   for ($y=imagesy($im)-1; $y0; $y--)

   {

   $clr1 = imagecolorsforindex($im, imagecolorat($im, $x-1, $y-1));

   $clr2 = imagecolorsforindex($im, imagecolorat($im, $x, $y));

   $r = intval($clr2["red"]+$degree*($clr2["red"]-$clr1["red"]));

   $g = intval($clr2["green"]+$degree*($clr2["green"]-$clr1["green"]));

   $b = intval($clr2["blue"]+$degree*($clr2["blue"]-$clr1["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<br";

   if (($new_clr=imagecolorexact($im, $r, $g, $b))==-1)

   $new_clr = Imagecolorallocate($im, $r, $g, $b);

   $cnt++;

   if ($new_clr==-1)

展开更多 50%)
分享

猜你喜欢

PHP中实现图片的锐化

PHP
PHP中实现图片的锐化

PHP实现图片简单上传

PHP
PHP实现图片简单上传

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

photoshop锐化图片教程 Photoshop锐化图片技巧

PS教程 PS基础
photoshop锐化图片教程 Photoshop锐化图片技巧

浅析php中实现多线程

PHP
浅析php中实现多线程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

PHP中实现进程间通讯

PHP
PHP中实现进程间通讯

PHP中实现面向对象编程

PHP
PHP中实现面向对象编程

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

浅析《世界OL》锤子的未来和出路

浅析《世界OL》锤子的未来和出路

PHP发现安全漏洞

PHP发现安全漏洞
下拉加载更多内容 ↓