<?php
//读取图像的类型
//1=GIF,2=JPG,3=PNG,4=SWF,5=PSD,6=BMP,7=TIFF(intelbyteorder),8=TIFF(motorolabyteorder),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++){
/*
ImageColorsForIndex --- 从索引值取得颜色
语法 : array imagecolorsforindex (int im, int index)
说明 :此函数传回指定的颜色索引值的RGB值,传回的数组有red、green和blue这三个索引值,数组的值为指定的颜色索引值的RGB值。
ImageColorAt --- 取得像素的颜色索引值
语法 : int imagecolorat (int im, int x, int 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("colorallocatefaileat$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>

PHP 做图片锐化处理的更多相关文章

  1. 用Lighttpd做图片服务器

    http://www.lsanotes.cn/install_lighttpd 用Lighttpd做图片服务器 一.安装lighttpd所需的库文件1.安装 pcrewgetftp://ftp.csx ...

  2. 使用HTML5的canvas做图片剪裁

    前言 图片裁剪上传,不仅是一个很贴合用户体验的功能,还能够统一特定图片尺寸,优化网站排版,一箭双雕. 需求就是那么简单,在浏览器里裁剪图片并上传到服务器. 我第一个想到的方法就是,将图片和裁剪参数(x ...

  3. PHP语言学习之php做图片上传功能

    本文主要向大家介绍了PHP语言学习之php做图片上传功能,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 今天来做一个图片上传功能的插件,首先做一个html文件:text.php < ...

  4. 基于jQuery适合做图片类网站的特效

    分享一款基于jquery适合做图片类网站的特效.这是一款鼠标经过图片滑动弹出标题效果代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="c ...

  5. 使用FormData数据做图片上传: new FormData() canvas实现图片压缩

    使用FormData数据做图片上传: new FormData()       canvas实现图片压缩 ps: 千万要使用append不要用set   苹果ios有兼容问题导致数据获取不到,需要后台 ...

  6. Windows+Nginx+IIS做图片分布式存储详细步骤

    最近几天,一直在学习nginx在windows平台下的使用,为了寻找几种大量图片分布式存储而且有相对简单的存储方案 nginx是一种,还找到一种MongoDB GridFS 这两种方案我还是比较中意的 ...

  7. tomcat用做图片服务器

    最近做了个小网站,就是用tinyce富文本编辑器,https://www.511easy.com/ 保持字体排版和图片 发现博客园的图片,一天之后就无法显示 就想着自己做一个图片服务器,上传图片到指定 ...

  8. 记一次IE浏览器做图片预览的坑

    随便写写吧,被坑死了 IE 10 及 IE10以上,可以使用FileReader的方式,来做图片预览,加载本地图片显示 IE 9 8 7 没有FileReader这个对象,所以只能使用微软自己的东西来 ...

  9. ViewPager做图片浏览器,加载大量图片OOM的问题修正

    /** * @author CHQ * @version 1.0 * @date 创建时间: 2016/7/26 17:18 * @parameter * @return * 图片查看器 * //可以 ...

随机推荐

  1. 当relative遇上z-index,阻断事件捕获

    今天在调试前端页面的时候,发现addflowrank这个元素的click事件不能触发了.下图是它的元素结构. 用开发者工具试图定位这个元素,看看它到底怎么了.发现:无论我怎么用光标定位这个元素都定位不 ...

  2. 【Tool】Linux下的Spark安装及使用

    1. 确保自己的电脑安装了JAVA Development Kit JDK, 用来编译Java应用, 如 Apache Ant, Apache Maven, Eclipse. 这里是我们安装Spark ...

  3. react-native 编译报错: undefined is not an object (evaluating '_react2.PropTypes.func')

    情况通报: 因为是我的二维码模块报错,提示报错代码如下 重要信息是下面的红色字体部分(Android 模拟器红屏) undefined is not an object (evaluating '_r ...

  4. window下搭建Python3.7+selenium3.1.1+pycharm环境

    1.安装Python3.7 1.1  下载 Python并安装 Python3.5 (勾选上 Add Python3.7 to PATH) 点击 Install Now,安装完成后将python路径加 ...

  5. 求解n位格雷码

    /************************************************************************* > File Name: Gray.cpp ...

  6. jzoj3454 表白(love)解题报告(01分数规划+DP)

    题目链接:https://jzoj.net/senior/#contest/show/2414/2 题目描述: 鸡腿是CZYZ的著名DS,但是不想追妹子的DS不是好GFS,所以鸡腿想通过表白来达到他追 ...

  7. BZOJ 1711 网络流

    思路: 神建图 源->饮料 边权为1 牛拆点 两个点之间的边权为1 饮料->左牛 边权为1 右牛->食品 边权为1 食品->汇边权为1 //By SiriusRen #incl ...

  8. android页面布局(listview填充中间)

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  9. 基于opencv的手写数字字符识别

    摘要 本程序主要参照论文,<基于OpenCV的脱机手写字符识别技术>实现了,对于手写阿拉伯数字的识别工作.识别工作分为三大步骤:预处理,特征提取,分类识别.预处理过程主要找到图像的ROI部 ...

  10. Bootstrap-FileInput组件的简单Demo

    官网: https://github.com/kartik-v/bootstrap-fileinput/ http://plugins.krajee.com/file-input   HTML页面: ...