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 相关文章推荐
基于文本的访客签到簿
Oct 09 PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
Jun 10 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
php使用curl获取https请求的方法
Feb 11 PHP
PHP实现简单汉字验证码
Jul 28 PHP
php冒泡排序与快速排序实例详解
Dec 07 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
Jun 07 PHP
Laravel5.1 框架路由基础详解
Jan 04 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的计数器程序
2006/10/09 PHP
新手学习PHP的一些基础知识分享
2011/07/27 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
javascript编程起步(第六课)
2007/01/10 Javascript
用javascript控制iframe滚动的代码
2007/04/10 Javascript
jQuery load方法用法集锦
2011/12/06 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
js 调用百度分享功能
2017/02/27 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
2017/12/15 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
vue键盘事件点击事件加native操作
2020/07/27 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
numpy排序与集合运算用法示例
2017/12/15 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
Python 移动光标位置的方法
2019/01/20 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
纽约手袋品牌:KARA
2018/03/18 全球购物
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
求职简历自荐信范文
2013/10/21 职场文书
建筑公司文秘岗位职责
2013/11/29 职场文书
《学会待客》教学反思
2014/02/22 职场文书
小学一年级学生评语
2014/04/22 职场文书
运动会班级前导词
2015/07/20 职场文书
公司安全管理制度范本
2015/08/05 职场文书