1.打开现有的图像

<?php
header("Content-type:image/jpeg");
$img=imagecreatefromjpeg("cc.jpg");
imagejpeg($img);
imagedestroy($img);
? >

函数imagecreatefromjpeg()的參数即文件所在路径。返回值是參数所指图片的资源标识符。

该函数时通过已有图像新建一个图像,并非单纯打开原图像本身。假设将图片的后缀名.jpg强制改为.png,即便是使用函数imagecreatefrompng()。也无法打开文件。由于图片本质还是jpg格式的图片。

2.获取图片的相关属性

<?php
$img=imagecreatefromjpeg("cc.jpg");
$x=imagesx($img);
$y=imagesy($img);
echo "图片cc.jpg的宽为:<b>$x</b> pixels";
echo "<br/>";
echo "<br/>";
echo "图片cc.jpg的高为:<b>$y</b> pixels";
? >

另外,通过一个不属于GD库的函数getimagesize(),能够取得图片的大小等相关属性,该函数的语法例如以下:

array getimagesize(string $filename [, array &imageinfo])

<?php
$img_info=getimagesize("cc.jpg");
for($i=0;$i<4;++$i)
{
echo $img_info[$i];
echo "<br/>";
}
?>

第三个元素是图片的格式,它的取值含义例如以下所看到的:

1:表示该图片是GIF格式

2:表示该图片是JPG格式

3:表示该图片是PNG格式

4:表示该图片是SWF格式

5:表示该图片是PSD格式

6:表示该图片是BMP格式

<?php
$pic_name="ee.png";
$pic_size=getimagesize($pic_name);
? >
<img src="<?php echo $pic_name; ? >"<? php echo $pic_size[3]; ?>>

3.对图片加水印效果

·获取要加入水印的图片的宽、高值

·确定图片大小是否满足水印文字大小

·确定水印效果在图片中的位置

·设定图像的混色模式

·生成水印效果

·释放资源

<?

php
function makeimagewatermark($image,$pos,$water_text,$font_size,$color)
{
$font_type="c://WINDOWS//Fonts//SIMYOU.TTF";
if(!empty($image)&& file_exists($image))
{
$img_info=getimagesize($image);
$g_w=$img_info[0];
$g_h=$img_info[1];
switch($img_info[2])
{
case 1:
$img=imagecreatefromgif($image);
break;
case 2:
$img=imagecreatefromjpeg($image);
break;
case 3:
$img=imagecreatefrompng($image);
break;
default:
die("Format Wrong");
}
}
else
{
die("Not exists!");
}
$temp=imagettfbbox(ceil($font_size*2.5),0,$font_type,$water_text);
$w=$temp[2]-$temp[6];
$h=$temp[3]-$temp[7];
if(($g_w<$w) || ($g_h<$h))
{
echo "Too small!";
return;
}
switch($pos)
{
case 0:
$pos_x=rand(0,($g_w-$w));
$pos_y=rand(0,($g_h-$h));
break;
case 1:
$pos_x=0;
$pos_y=0;
break;
case 2:
$pos_x=($g_w-$w)/2;
$pos_y=($g_h-$h)/2;
break;
case 3:
$pos_x=$g_w-$w;
$pos_y=$g_h-$h;
break;
default:
$pos_x=rand(0,($g_w-$w));
$pos_y=rand(0,($g_h-$h));
break;
}
imagealphablending($img,true);//设置图像混色模式 if(!empty($color) && (strlen($color)==7))
{
$R=hexdec(substr($color,1,2));
$G=hexdec(substr($color,3,2));
$B=hexdec(substr($color,5));
}
else
{
die("Format wrong!"); }
$text_color=imagecolorallocate($img,$R,$G,$B);
imagettftext($img,$font_size,0,$pos_x,$pos_y,$text_color,$font_type,$water_text);
switch($img_info[2])
{
case 1 :
imagegif($img,$image);
break;
case 2 :
imagejpeg($img,$image);
break;
case 3:
imagepng($img,$image);
break;
default:
die("Formate unSupport!");
}
imagedestroy($img);
}
if(isset($_FILES) && !empty($_FILES['userfile'])&& $_FILES['userfile']['size']>0)
{$uploadfile="./".time()."_".$_FILES['userfile']['name'];
if(copy($_FILES['userfile']['tmp_name'],$uploadfile))
{
makeimagewatermark($uploadfile,2,"Photo by Mac",16,"#43042A");
echo "<img src=\"".$uploadfile."\" border=\"0\">";
}
else
{
echo "uploadWrong!<br/>";
}
}
?>
<html>
<head>
<title>
19.9.php
</title>
</head>
<body>
<form enctype="multipart/form-data" method="POST">
选择上传图片:<input name="userfile" type="file">
<input type="submit" value="上传">
</form>
</body>
</html>

4.生成已有图片的缩略图

<?

php
header("Content-type:image/jpeg");
$img_name="cc.jpg";
$src_img=imagecreatefromjpeg($img_name);
$ow=imagesx($src_img);
$oh=imagesy($src_img);
$nw=round($ow*200.0/$ow);
$nh=round($oh*200.0/$oh);
$desc_img=imagecreate($nw,$nh);
imagecopyresized($desc_img,$src_img,0,0,0,0,$nw,$nh,$ow,$oh);
imagejpeg($desc_img);
imagedestroy($desc_img);
imagedestroy($src_img);
?>

第一个和第二个參数各自是目标图像、原图像的标识符,接下来4个參数是目的图像和原图像的复制位置的坐标,最后4个參数是目的图像和原图像的复制区域的宽高。

!

!使用函数imagecopyresampled()函数

<?php
header("Content-type:image/jpeg");
$img_name="cc.jpg";
$percent=0.2;
$src_img=imagecreatefromjpeg($img_name);
$ow=imagesx($src_img);
$oh=imagesy($src_img);
$nw=$ow*$percent;
$nh=$oh*$percent;
$desc_img=imagecreatetruecolor($nw,$nh);
imagecopyresampled($desc_img,$src_img,0,0,0,0,$nw,$nh,$ow,$oh);
imagejpeg($desc_img);
imagedestroy($desc_img);
imagedestroy($src_img);
?>

版权声明:本文博客原创文章。博客,未经同意,不得转载。

PHP从零单排(十八)图像处理的更多相关文章

  1. 学好C++必须要注意的十八个问题

    转自  http://blog.chinaunix.net/uid-7396260-id-2056691.html 一.#include "filename.h"和#i nclud ...

  2. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写

    实验十八:SDRAM模块① — 单字读写 笔者与SDRAM有段不短的孽缘,它作为冤魂日夜不断纠缠笔者.笔者尝试过许多方法将其退散,不过屡试屡败的笔者,最终心情像橘子一样橙.<整合篇>之际, ...

  3. ComicEnhancerPro 系列教程十八:JPG文件长度与质量

    作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十八:JPG文件长度 ...

  4. Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能

    在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...

  5. Bootstrap <基础二十八>列表组

    列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...

  6. Bootstrap <基础十八>面包屑导航(Breadcrumbs)

    面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...

  7. 最全的MySQL基础【燕十八传世】

    1.课前准备! 开启mysql服务:1).配置环境变量;2).net start mysql 将该sql文件导入到你的数据库中,以下所有操作都是基于该数据库表操作的!!! [此笔记是本人看着视频加上自 ...

  8. Web 前端开发人员和设计师必读文章推荐【系列二十八】

    <Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  9. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十八】

    <Web 前端开发精华文章推荐>2013年第六期(总第十八期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  10. NeHe OpenGL教程 第四十八课:轨迹球

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

随机推荐

  1. 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)

    原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...

  2. [渣译文] SignalR 2.0 系列: 支持的平台

    原文:[渣译文] SignalR 2.0 系列: 支持的平台 英文渣水平,大伙凑合着看吧,并不是逐字翻译的…… 这是微软官方SignalR 2.0教程Getting Started with ASP. ...

  3. Oracle 六闪回技术,flashback

    Flashback 技术基于Undo segment基于内容的, 因此,限制UNDO_RETENTON参数. 要使用flashback 特征,您必须启用自己主动撤销管理表空间. 在Oracle 11g ...

  4. maven/eclipse搭建ssm(spring+spring mvc+mybatis)

    maven/eclipse搭建ssm(spring+spring mvc+mybatis) 前言 本文旨在利用maven搭建ssm环境,而关于maven的具体内容,大家可以去阅读<Maven 实 ...

  5. 【Android进阶】Activity和Fragement中onSaveInstanceState()的使用详解

    在activity(或者是fragement)被杀掉之前调用保存每个实例的状态,以保证该状态可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle) (传 ...

  6. Python 基金会 —— 模块和包简介

    一.模块(Module) 1.模块的作用      在交互模式下输出的变量和函数定义,一旦终端重新启动后,这些定义就都不存在了,为了持久保存这些变量.函数等的定义,Python中引入了模块(Modul ...

  7. sizeof运营商

    sizeof它是C语言的关键字,它计算对象所占用的字节数.采用sizeof通过计算对象的大小,占用的对象是一个良好的编程习惯二手. ★你得到的内置型尺寸 一些内置类型的大小会随着体系结构的不同而不同, ...

  8. 【Java技术位】——代理模式及其事务包

    背景 项目中我们会遇到这种情况:在几个方法中增加同样的代码,这些代码是与业务无关的,而且以后有可能因为考虑不周或需求变动再或者是其它原因,我们须要对他们进行逐一进行修改.举个详细的样例,比方程序中的日 ...

  9. HDU 1677 Nested Dolls

    过了之后感觉曾经真的做过这样的类型的题. 之前一直非常疑惑二级排序的优先级问题,如今发现二级排序真的没有绝对的优先级. 对于此题,若按W排序,则有1到i件物品的W均小于等于第i+1件物品(设为A)的W ...

  10. 付款页面DEMO

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHRxdWVlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...