1, PHP 中 图片的处理 要 依靠于扩展库, 可以选择gd2,或者imagemagick

第一步,首先要开启gd2的扩展库,在phpinfo() 中,要看到

这个的存在

打开这个后,就能够去操作图片了。

那么操作图片,是个什么流程呢??图片也是文件,是否跟文件操作的流程一样呢。

答案是yes,

打开图片。

对图片进行编辑,如拷贝,改变每一个像素的模式,把其他图片叠加上来等等。

可以选择保存图片。

貌似所有的文件操作都差不多一样,打开,编辑,保存.

那么在PHP中怎么打开一个图片呢?

这里要注意的是,打开图片的方式有多种,

比如打开一个已经存在的图片,会根据图片类型来,要使用不同的函数打开

具体函数有这么多:

imagecreate -- 新建一个基于调色板的图像

imagecreatefromgd2 -- 从 GD2 文件或 URL 新建一图像

imagecreatefromgd2part -- 从给定的 GD2 文件或 URL 中的部分新建一图像

imagecreatefromgd -- 从 GD 文件或 URL 新建一图像

imagecreatefromgif -- 从 GIF 文件或 URL 新建一图像

imagecreatefromjpeg -- 从 JPEG 文件或 URL 新建一图像

imagecreatefrompng -- 从 PNG 文件或 URL 新建一图像

imagecreatefromstring -- 从字符串中的图像流新建一图像

imagecreatefromwbmp -- 从 WBMP 文件或 URL 新建一图像

imagecreatefromxbm -- 从 XBM 文件或 URL 新建一图像

imagecreatefromxpm -- 从 XPM 文件或 URL 新建一图像

imagecreatetruecolor -- 新建一个真彩色图像

看见这么多函数的时候,我当场就不乐意了,这么多函数,到底用哪一个,。?

难道有一个图片文件过来,我还要先判断它到底是什么格式的图片,是jpg,png,或者说是gif??????

然后再用对应的函数打开这个图片?

如果用扩展名的方式去判断图片类型,万一某位同学,把png的扩展名称改成jpg,那我这里不就出问题了?

难道只能使用文件头的方式去获取文件类型了?

带着这些问题,我再次花时间去看了一次php帮助手册,终于发现,救命的稻草出现了。

以下是帮助手册原文:

getimagesize

(PHP 3, PHP 4, PHP 5)

getimagesize -- 取得图像大小

说明

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

getimagesize()函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM或 WBMP图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML文件中 标记中的 height/width 文本字符串。

此函数,功能就是取到文件宽,高,以及文件类型(png,jpg,gif),当场,我就测验了一下,如果用png图片,吧后缀名改成jpg,看看这个函数能否正常的获取文件类型,结果发现,是ok的,如下图:

数组中下标为0=宽度,1=高度,2=类型, 类型怎么是数字呢???我要怎么对应呢?

带着疑问,再次阅读文档:发现如下

看见这里,脑袋中就已经开始构思,做一个配置数组,来自动获取打开文件的函数了,代码如下:

配置数组中 下标 为3的,也png,不知道为什么,这函数会返回为3. 不过问题已经得到解决,已经不用再伤脑筋,到底用哪个函数去打开图片了。

那么既然文件已经打开了,那么就该思考如何制作缩略图了。

缩略图的概念:应该就是把大图缩小,变成一个指定尺寸的小图。

这个时候,问题又来了,把一张图片,变成指定尺寸,说起来简单,万一要吧一个200 * 400的图片,变成一个400 * 200的,你变给我看看。长宽比例完全不对称,强行变,拉伸,都不知道会失真成什么样子,如何变嘛!!!!!!!!

仔细思考了下,解决方案有2种:

保持原图长宽比,以图片的长度,或者宽度中,最大的一个为准,尽可能的显示整张图,剩下的空白,用其他纯色填充。

保持原图长宽比,以图片的长度,或者宽度中,最小的一个为准,尽可能填充整个缩略图的画框,只显示原图中的某一部分。

整个缩略图的制作方式大概分如下几步:

新建一个图片,图片的宽高就是所需要的缩略图的宽高。

把原图中的某一部分copy到新建的图片里面来

把新建的图片显示出来,或者保存成文件。

涉及到的相关图片操作函数如下:

Imagecreatetruecolor 创建黑色图片

Getimagesize 获取图片相关信息

Imagecopyresampled copy一个图片中的一部分到另外一个图片

Imagejpeg 输出图片

具体使用方法请查看相关手册。

分别按照2种方式制作写了如下代码:

1, 以小为准

2,以大为准

然后准备了3张图片

最终得到如下结果:

经过考虑,最终选择以小为基准,也就是尽量铺满整个缩略图.

扩展:水印如何制作,验证码如何制作?原理跟缩略图差不多。附上效果

废话少说,上源码

以小为准

header('Content-type: image/jpeg');

function get_thumb($filename,$width,$height,$outPath='',$type='1')

{

$newimages = imagecreatetruecolor($width,$height);//资源型

$config = array(

IMG_GIF => 'imagecreatefromgif',

IMG_JPG => 'imagecreatefromjpeg',

IMG_PNG => 'imagecreatefrompng',

IMG_JPEG =>'imagecreatefromjpeg'

);

$imgInfo = getimagesize($filename);

$o_image = $config[$imgInfo[2]]($filename);

$w = &$imgInfo[0];

$h = &$imgInfo[1];

if ($w > $h){

$nheight = min($height,$h);

$nwidth = $w / $h * $nheight;

$x = -($nwidth - $width)/2;

$y = -($nheight - $height)/2;

}elseif ($w <= $h){

$nwidth = min($w,$width);

$nheight = $h / $w * $nwidth;

$y = -($nheight - $height)/2;

$x = -($nwidth - $width)/2;

}

imagecopyresampled($newimages,$o_image,$x,$y,0,0,$nwidth,$nheight,$imgInfo[0],$imgInfo[1]);

imagejpeg($newimages,null,100);

}

get_thumb($_GET['img'] ? $_GET['img']:"1.png",290,230);

以大为准

header('Content-type: image/jpeg');

function get_thumb($filename,$width,$height,$outPath='',$type='1')

{

$newimages = imagecreatetruecolor($width,$height);//资源型

//$white = imagecolorallocate($newimages,255,255,255);

//imagefill($newimages,0,0,$white);

$config = array(

IMG_GIF => 'imagecreatefromgif',

IMG_JPG => 'imagecreatefromjpeg',

IMG_PNG => 'imagecreatefrompng',

IMG_JPEG =>'imagecreatefromjpeg'

);

$imgInfo = getimagesize($filename);

$o_image = $config[$imgInfo[2]]($filename);

$w = &$imgInfo[0];

$h = &$imgInfo[1];

if ($w > $h){

$nwidth = min($width,$w);

$nheight = $h / $w * $nwidth;

$x = ($width - $nwidth) / 2;

$y = ($height - $nheight) / 2;

}elseif ($w < $h){

$nheight = min($height,$h);

$nwidth = $w / $h * $nheight;

$y = ($height - $nheight) / 2;

$x = ($width - $nwidth) / 2;

}

imagecopyresampled($newimages,$o_image,$x,$y,0,0,$nwidth,$nheight,$imgInfo[0],$imgInfo[1]);

imagejpeg($newimages,null,100);

}

get_thumb($_GET['img'] ? $_GET['img']:"1.png",400,400);

水印

function get_thumb($filename,$width,$height,$outPath='',$type='1')

{

$newimages = imagecreatetruecolor($width,$height);//资源型

//$white = imagecolorallocate($newimages,255,255,255);

//imagefill($newimages,0,0,$white);

$config = array(

IMG_GIF => 'imagecreatefromgif',

IMG_JPG => 'imagecreatefromjpeg',

3 => 'imagecreatefrompng',

IMG_PNG => 'imagecreatefrompng',

IMG_JPEG =>'imagecreatefromjpeg'

);

$imgInfo = getimagesize($filename);

// $o_image_type = image_type_to_extension($imgInfo['2']);

$o_image = $config[$imgInfo[2]]($filename);

$w = &$imgInfo[0];

$h = &$imgInfo[1];

if ($w > $h){

$nheight = min($height,$h);

$nwidth = $w / $h * $nheight;

$x = -($nwidth - $width)/2;

$y = -($nheight - $height)/2;

}elseif ($w <= $h){

$nwidth = min($w,$width);

$nheight = $h / $w * $nwidth;

$y = -($nheight - $height)/2;

$x = -($nwidth - $width)/2;

}

imagecopyresampled($newimages,$o_image,$x,$y,0,0,$nwidth,$nheight,$imgInfo[0],$imgInfo[1]);

/*水印*/

$filename = "sy.png";

$imgInfo = getimagesize($filename);

$o_image = $config[$imgInfo[2]]($filename);

// var_dump($imgInfo);

// imagecopyresampled($newimages,$o_image,0,0,0,0,$imgInfo[0],$imgInfo[1],$imgInfo[0],$imgInfo[1]);

if ($width >= $height){

$h = $height / 16;

$w = $imgInfo[0] / $imgInfo[1] * $h;

}else{

$w = $width / 9;

$h = $imgInfo[1] / $imgInfo[0] * $w;

}

$h = min($h,$imgInfo[1]);

$w = min($w,$imgInfo[0]);

$sy_x = $width - $w - 40;

$sy_y = $height - $h -30;

imagecopyresampled($newimages,$o_image,$sy_x ,$sy_y,0,0,$w,$h,$imgInfo[0],$imgInfo[1]);

header('Content-type: image/jpeg');

imagejpeg($newimages,null,100);

}

get_thumb($_GET['img'] ? $_GET['img']:"1.png",400,400);

验证码

error_reporting(7);

session_start();

header("Content-Type:image/png");

vcode();

function vcode($width=100,$height=40)

{

$_SESSION['vcode'] = ""; //初始化session

$im = imagecreatetruecolor($width,$height); //新建一个300 * 300 的黑色图像,资源型数据

imagefill ($im, 0, 0, imagecolorallocate($im,0xCC,0xCC,0xCC));//填充灰色,其实就是吧背景改成灰色

$colors = array(

//imagecolorallocate($im,255,255,255),

);

for($i=0;$i<10;++$i){//生成10个比较深的颜色

$colors[] = imagecolorallocate($im,mt_rand(0,128),mt_rand(0,128),mt_rand(0,128));

}

$string = "噢静安寺奇偶挂科率快点快点快递发从摩擦摩擦在迪欧发顺丰是大发明家路上打劫风口浪尖独守空房激励大师开发就肯定是房间里看电视费我我荣获唯一让退全额一千五要吗新民婆呕吐太无二套有";

$len = strlen($string)/3;//计算中文的长度

$font = "2.TTF";//设置字体

for($i=0;$i<4;++$i){//取4个字,然后画到图片里面,顺便也放进session

$_tmp = mt_rand(0,$len-1);

$_tmp = $_tmp * 3;

//$text .= mb_substr($string,$_tmp,1,'utf8');

$text = $string[$_tmp].$string[$_tmp+1].$string[$_tmp+2];

$_SESSION['vcode'] .= $text;

imagettftext($im,mt_rand(16,26),mt_rand(-45,45),11+21*$i,25,$colors[array_rand($colors)],$font,$text);

}

$colors = array();

for($i=0;$i<10;++$i){//再次随机10个浅色

$colors[] = imagecolorallocate($im,mt_rand(128,255),mt_rand(128,255),mt_rand(128,255));

}

for($i=0;$i<20;++$i){//用浅色划线

imageline ( $im, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $colors[array_rand($colors)]); //画一根白线

}

//bool imagesetpixel ( resource image, int x, int y, int color )

for($i=0;$i<200;++$i){//用浅色画点

imagesetpixel ($im, mt_rand(0,$width), mt_rand(0,$height), $colors[array_rand($colors)] );

}

imagepng($im);

}

php图片是啥,PHP图片操作相关推荐

  1. 【s操作】轻松优雅的保存微信群图片和朋友圈图片

    上次聊了一下锤子手机的使用体验:锤子手机使用2年,聊聊锤子手机,坚果手机功能使用体验,主要介绍了几个软件上的使用技巧.最近几年越来越重视软件的使用体验,主要因为软件更亲民,硬件上从835又到845又到 ...

  2. c#图片base64去转义字符_C#实现字符串与图片的Base64编码转换操作示例

    本文实例讲述了C#实现字符串与图片的Base64编码转换操作.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; usin ...

  3. c#图片base64去转义字符_C#实现字符串与图片的Base64编码转换操作示例|chu

    本文实例讲述了C#实现字符串与图片的Base64编码转换操作.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; usin ...

  4. java 1.7图片压缩_appium+java(七)图片的放到及缩小操作

    appium+java(七)图片的放到及缩小操作 多点触控(MultiTouch) MultiTouch对象是触摸操作的集合. 多点触控手势只有两个方法,add和perform. add 用于将不同的 ...

  5. poi对word读取(文本和图片)、修改、保存操作及word转换为PDF

    word转换为PDF时要引入maven依赖 <dependency><groupId>com.documents4j</groupId><artifactId ...

  6. PhotoShop彩色图片打印机只有四中颜色操作步骤:

    打印彩色图片打印机只有四中颜色操作步骤: 1.图片调成灰度模式: 2.建立色调分离模版选择4: 3.图片调整为CMYK模式: 4.调整魔棒工具: 5.用魔棒工具勾选第一个色调,建立新的图层-按住alt ...

  7. 图片转换格式的具体操作步骤

    在工作中,作为运营人员每天都会使用到大量的图片,当我们把这些图片上传到网上时,由于网上的格式限制,导致我们手里的一些图片无法上传.这时我们就需要转换图片,一般这种情况下会用软件进行格式转换,非常方便简 ...

  8. 图片截图识别文字怎么操作?这两个方法不要错过

    现如今,图片截图识别文字是一项非常有用的技术.很多小伙伴平时在工作或者生活中都会保存很多图片格式的资料文件把.如果遇到需要讲内容图区到文档中编辑的话,识别技术就可以帮助我们快速识别图片中的文字,从而节 ...

  9. java操作图片为啥改了图片以后底片是红色的

    之前项目上线上传的两张png格式的图片. 后来因需求变更 需要修改 图片,想着只需要修改图片的名称直接替换掉就可以了 但是实际出来的效果确是 替换后的图片呈现泛红的状态. 找了一下原因是用 java ...

最新文章

  1. 防雪崩利器:熔断器 Hystrix 的原理与使用--转
  2. postgresql数据库连接池pgbouncer的搭建
  3. 2021数模美赛论文提交具体规则和注意事项汇总!
  4. 天气预报中的风向到底有啥用?
  5. 机器学习中为什么需要梯度下降_梯度下降直觉 - 机器是如何学习的
  6. SpringBoot是如何解析参数的
  7. 【java】java的Jaas授权与鉴权
  8. Elasticsearch 监控和优化(持续)
  9. Sequelize-nodejs-5-Querying
  10. 如何在服务器上上传手游源码,【仙变3手游】跨服服务端游戏源码+架设教程+双端+后台...
  11. 常用编程语言应用、前景及学习方法
  12. dell 工作站装linux_dell服务器linux系统安装
  13. QCIF CIF 2CIF 4CIF 普及
  14. python 使用word转pdf遇到的问题
  15. python常用模块
  16. 共享文件计算机和设备拒绝访问,共享文件夹无法访问、设置文件夹访问权限、共享文件夹拒绝访问的解决方法...
  17. 产品没出来提前做推广_如果您不知道该怎么做,请提早和经常提出问题
  18. smplayer 字幕!解决smplayer字幕乱码的方法
  19. android版本低无法安装微信,解决低版本安卓4.4.4无法安装微信的问题
  20. 【更新】京东、美团、饿了么获取cookies

热门文章

  1. AD ADSI入门
  2. ADS(Authenticated data structure)
  3. 网站的养站(养蜘蛛)技巧
  4. Windows系统cmd命令+实用工具
  5. 怎么起用计算机无线开关,笔记本电脑无线网卡,教您如何打开电脑无线网卡开关...
  6. C/C++项目开发:《火柴人游戏》,500行源代码开发
  7. Oracle中如何添加date类型的数据
  8. 学习笔记 | SMART原则:制定目标
  9. openGPS.cn - 关于手机号定位方面的个人理解
  10. iOS7(Xcode5)中隐藏状态栏的方法