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 相关文章推荐
提取HTML标签
Oct 09 PHP
php实现utf-8和GB2312编码相互转换函数代码
Feb 07 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
Dec 24 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
Laravel实现构造函数自动依赖注入的方法
Mar 16 PHP
php基于curl实现的股票信息查询类实例
Nov 11 PHP
Yii框架创建cronjob定时任务的方法分析
May 23 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 PHP
PHP7匿名类的用法示例
Apr 05 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
生成卡号php代码
2008/04/09 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
2018/01/29 PHP
js数组Array sort方法使用深入分析
2013/02/21 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
简单了解常用的JavaScript 库
2020/07/16 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
python爬虫实例详解
2018/06/19 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
Python内置类型性能分析过程实例
2020/01/29 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
酒吧员工的岗位职责
2013/11/26 职场文书
办理退休介绍信
2014/01/09 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
单位介绍信格式范文
2015/05/04 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL