PHP中实现图片的锐化


Posted in PHP onOctober 09, 2006

<?

//读取图像的类型

//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;

if ($ImageType>3) 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/>

<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; $x>0; $x--)

for ($y=imagesy($im)-1; $y>0; $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) die("color allocate faile at $x, $y ($cnt).");

imagesetpixel($im, $x, $y, $new_clr);

}

}


PHP 相关文章推荐
windows xp下安装pear
Dec 02 PHP
在PHP中使用模板的方法
May 24 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
php判断GIF图片是否为动画的方法
Sep 04 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
php构造函数与析构函数
Apr 23 PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 PHP
Laravle eloquent 多对多模型关联实例详解
Nov 22 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
Sep 30 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
Apr 26 PHP
在Zeus Web Server中安装PHP语言支持
Oct 09 #PHP
通过对php一些服务器端特性的配置加强php的安全
Oct 09 #PHP
一个阿拉伯数字转中文数字的函数
Oct 09 #PHP
PHP与已存在的Java应用程序集成
Oct 09 #PHP
使用PHP模拟HTTP认证
Oct 09 #PHP
在PHP中使用XML
Oct 09 #PHP
使用PHP维护文件系统
Oct 09 #PHP
You might like
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
PHP curl 获取响应的状态码的方法
2014/01/13 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
php简单获取复选框值的方法
2016/05/11 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
js密码强度校验
2015/11/10 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Python变量和字符串详解
2017/04/29 Python
Python切片操作深入详解
2018/07/27 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
python字符串反转的四种方法详解
2019/12/02 Python
Eclipse面试题
2014/03/22 面试题
书法比赛获奖感言
2014/02/10 职场文书
个人授权委托书
2014/04/03 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
Python连续赋值需要注意的一些问题
2021/06/03 Python
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle