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从零单排(十八)图片处理,布布扣,bubuko.com

时间: 2024-10-20 16:54:01

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

Unity3D游戏开发从零单排(十) - 进击的Shader续

自定义光照模型 在这之前首先来了解一下SurfaceOutput这个结构体,它是一个包含大多数描述一个物体表面渲染特征的结构,具体结构如下: struct SurfaceOutput { half3 Albedo;//纹理颜色 half3 Normal;//法线 half3 Emission;//自发光,不受照明的影响 half Specular;//高光指数 half Gloss;//光泽度 half Alpha;//Alpha通道 }; 基本上所有的Shader函数要处理的就是这个结构体.

【Android的从零单排开发日记】之入门篇(八)——Android数据存储(下)

废话不多说了,紧接着来讲数据库的操作吧.Come On! 提到数据存储问题,数据库是不得不提的.数据库是用来存储关系型数据的不二利器.Android为开发者提供了强大的数据库支持,可以用来轻松地构造基于数据库的应用.Android的数据库应用,依托于当下最流行的开源嵌入式数据库SQLite.在Android中,应用的数据库文件是该应用私有的,存储在应用数据目录下的databases子目录内.从代码结构来看,Android的数据库实现可以分成两个层次,在底层通过C++调用SQLite的接口来执行S

PHP从零单排(十四)数据分页显示的原理及实现

分页显示是WEB编程中最频繁处理的环节之一.所谓分页显示,就是通过程序将结果集一段一段的来显示.实现分页显示,需要两个初始参数:每页显示多少记录和当前是第几页.再加上完整的结果集,就可以实现数据的分页显示.至于其他功能,比如上一页.下一页等均可以根据以上信息加以处理得到. 要取得某表中的前10条记录,可以使用如下SQL语句: SELECT * FROM a_table LIMIT 0,10 要查找第11到第20条记录,使用的SQL语句如下所示: SELECT * FROM a_table LIM

斯坦福第十八课:应用实例:图片文字识别(Application Example: Photo OCR)

18.1  问题描述和流程图 18.2  滑动窗口 18.3  获取大量数据和人工数据 18.4  上限分析:哪部分管道的接下去做 18.1  问题描述和流程图 图像文字识别应用所作的事是,从一张给定的图片中识别文字.这比从一份扫描文档中 识别文字要复杂的多. 为了完成这样的工作,需要采取如下步骤: 为了完成这样的工作,需要采取如下步骤: 1. 文字侦测(Text detection)——将图片上的文字与其他环境对象分离开来 2. 字符切分(Character segmentation)——将文

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

作者:马健邮箱:[email protected] 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十八:JPG文件长度与质量 众所周知,JPG是一种"有损"压缩格式,与PNG等无损压缩格式相比,最大的问题是:如果反复压缩,会造成图像质量逐渐退化.所以在对JPG文件进行处理,并且输出仍然选择JPG格式的情况下,很多人都会问同样的一个问题:如何才能在尽情享受有损压缩带来的较小文件长度的便利前提下,尽量避免图像质量退化? 为了解

Cocos2d-x 3.x 开发(十八)10行代码看自动Batch,10行代码看自动剔除

1.概述 在游戏的运行过程中,图形的绘制是非常大的开销.对于良莠不齐的Android手机市场,绘制优化较好的游戏,可以在更多的手机上运行,因此也是优化的重中之重.图形方面的优化主要体现在减少GUP的绘制次数上.这里我们分别从自动优化渲染批次和绘制剔除两个方面来看新版本在绘制上的优化. 2.自动batch 在Cocos2d-x 3.x中,抛弃了先前手动编写BatchNode,采用自动管理的方式.说起BatchNode,就难免涉及到显卡底层的绘制原理.简单的说,每提交一条绘制指令到显卡都会产生消耗,

NeHe OpenGL教程 第三十八课:资源文件

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十八课:资源文件 从资源文件中载入图像: 如何把图像数据保存到*.exe程序中,使用Windows的资源文件吧,它既简单又实用. 欢迎来到NeHe教程第38课.离上节课的写作已经有些时日了,加上写了一整天的code,也许笔头已经

【OpenCV新手教程之十八】OpenCV仿射变换 &amp;amp; SURF特征点描写叙述合辑

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本号: 2.4.9 本篇文章中.我们一起探讨了OpenCV

抢单十八招

第一招    建立信赖感 第二招    派送<感谢信> 第三招    调查开路 第四招    老树发新枝 第五招    挽留即将失去的订户 第六招    让老订户介绍新订户 第七招    体验读者心理需求设计有针对性提问 第八招    不怕拒绝 第九招    利用从众心理 第十招    讨价还价 第十一招  对比取胜 第十二招  学会敲门 第十三招  找到话事人 第十四招  讲故事感染客户 第十五招  死缠烂打 第十六招  乡音乡情 第十七招  关注亚运 第十八招  志在必得 一. 建立信赖感