PHP从零单排(十八)图像处理
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从零单排(十八)图像处理的更多相关文章
- 学好C++必须要注意的十八个问题
转自 http://blog.chinaunix.net/uid-7396260-id-2056691.html 一.#include "filename.h"和#i nclud ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写
实验十八:SDRAM模块① — 单字读写 笔者与SDRAM有段不短的孽缘,它作为冤魂日夜不断纠缠笔者.笔者尝试过许多方法将其退散,不过屡试屡败的笔者,最终心情像橘子一样橙.<整合篇>之际, ...
- ComicEnhancerPro 系列教程十八:JPG文件长度与质量
作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十八:JPG文件长度 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能
在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...
- Bootstrap <基础二十八>列表组
列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...
- Bootstrap <基础十八>面包屑导航(Breadcrumbs)
面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...
- 最全的MySQL基础【燕十八传世】
1.课前准备! 开启mysql服务:1).配置环境变量;2).net start mysql 将该sql文件导入到你的数据库中,以下所有操作都是基于该数据库表操作的!!! [此笔记是本人看着视频加上自 ...
- Web 前端开发人员和设计师必读文章推荐【系列二十八】
<Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十八】
<Web 前端开发精华文章推荐>2013年第六期(总第十八期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
- NeHe OpenGL教程 第四十八课:轨迹球
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
随机推荐
- 使用cm-12.0源代码编译twrp
Select the newest branch available. This step is not necessary with Omni because Omni already includ ...
- AWR报告生成
ORACLE数据库两个比較重要的问题查看报告:awrrpt.sql,ashrpt.sql 生成报告的脚本一般存放在例如以下路径: /home/TEST/db/tech_st/11.2.0/rdbms/ ...
- FTP文件操作之获取文件列表
前面已经介绍了很多关于FTP对文件的操作,今天再跟大家介绍一个获取文件列表的功能.这个功能应该算是最简单的一个了,它只是获取了一下文件信息,而没有进行实质上的数据传输. 下面是是该功能的核心代码: ...
- 【Web探索之旅】第三部分第一课:服务器
内容简介 1.第三部分第一课:服务器 2.第三部分第二课预告:IP地址和域名 第三部分第一课:服务器 大家好,欢迎来到[Web探索之旅]的第三部分.这一部分有不少原理,还是很重要的. 这一部分我们会着 ...
- 如何区分MNO和MVNO
MVNO(Mobile Virtaul Network Operator)虚拟网络运营商,没有自己的物理网络,租用MNO(Mobile Network Operator)网络提供的网络服务. 我们知道 ...
- hdu 4454 Stealing a Cake(三分之二)
pid=4454" target="_blank" style="">题目链接:hdu 4454 Stealing a Cake 题目大意:给定 ...
- 【Android基础】Activity之间进行参数传递的三种方式
1.使用Intent进行传输 //发送数据的Activity class button implements OnClickListener{ @Override public void onClic ...
- Android设计模式(十)--生成器模式
回头看自己写的东西,大概Android当自己控制的定义,编写代码适用性比较高.但是,看看没有什么技术含量,因此,当在学习设计模式,想想有些东西是否可以改善,例如: 自己定义Dialog是Android ...
- linux内核数据包转发流程(三)网卡帧接收分析
[版权声明:转载请保留出处:blog.csdn.net/gentleliu.邮箱:shallnew*163.com] 每一个cpu都有队列来处理接收到的帧,都有其数据结构来处理入口和出口流量,因此,不 ...
- Jedis连接
Jedis连接 到场api中的jedis.我们能够发现,jedis类提供了4个构造方法.都可用于连接: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc29 ...