自动截取图片一部分(一像素用于平铺)

来源:互联网 发布:java程序执行入口 编辑:程序博客网 时间:2024/06/06 04:59

自己早期在做图片上传的时候应要求研究了一个自动截取图片用于平铺的函数。当然也可以封装一下,成一个类。共勉。

张存超php技术博客

做程序的开发,必然会遇到处理图片上传的问题,图片上传的功能其实很简单了,这里我要说的是GD库的使用。其实,GD库也没有我们想的那么复杂。只不过是他的函数的名字特别长,特别的多。但其实无非都是创建个资源先,先创建画布,有专门的画线、画点、画块。的函数,特殊的还可以画文字,你给他文字,和字体样式,给他位置,他自动去画,还可以画图像,将一个图片画到一个画布中。这样基本就已经可以满足我们大部分对图片处理的需要了。但是还有一个比较重要的功能,也是我们用到的最多的功能,就是截取。

所谓的截取的原理是什么,其实也是一样的道理,就是如果有一张图片是100×100,而我们想要截取一个50×50的图像,那就是先创建一个50×50的画布,然后定准图片开始截取的坐标,和结束的坐标。我们都应该知道,在程序中,图片是用坐标像素来确定的。图片左上角是(0,0)位置。右下角是其(width,height)位置。这也是和我们普通的学习的坐标的一点点区别。知道了规则就方便了,同样的图像的缩放也都是一样的道理,只是一些镂空的设计有些麻烦,因为我们知道,有些logo事需要透明设置的,通过程序的上传缩放后有肯能会将透明变为一些默认的颜色。这些以后在讲,现在就说说截取。我们以截取截取以像素用于平铺为例来讲。

首先,我们先要想一下,平铺的方式有几种,有人说两种,水平和竖直。但其实不然。如果一个图片的上下左右各不相同,那么向上平铺和向下平铺所用的图片就是不一样的,同样,向左和向右平铺的图片也是不一样的了。所以平铺的方式目前来说至少有四种。即上下左右,他们大体上的实现原理是一样的,只是其宽高和起止不同而已、但也就是这简单的不同就可能需要我们好好的研究。我们先以最常用的向右平铺为例来讲解。

这个是代码实现。我们以一个图片文件为例,当然这个图片可以是你刚刚上传后的,给他路径就可以了。

<?php

/*这里我们以jpg格式的图片为例,不同格式的图片,有些处理函数也是不同的,不过也很容易区分,这些特殊的函数都有其后缀在函数名中*/

$filename = ’1.jpg’;

// 因为创建后的图片文件不会输出给浏览器而是用于保存,所以不用指定头文件。

/*获取图片的宽高,既然是向右平铺,也就是说这个截取后的图片的宽是确定的,也就是1像素,而高呢,应该是原图片的高。*/

list($width, $height) = getimagesize($filename);

$newwidth = 1;

$newheight = $height;

// 创建一个图片。接收参数分别为宽高,返回生成的资源句柄,就是一个画布

$thumb = imagecreatetruecolor($newwidth, $newheight);

/*获取源文件资源句柄。接收参数为图片路径,返回句柄,这也是画布,因为我们是不能直接操作图片文件的,需要将他画到画布中,成为资源才可以操作。*/

$source = imagecreatefromjpeg($filename);//imagecreatefromgif  imagecreatefrompng

/*开始截取,他的意思就是将第一个资源的规定的开始位置,结束位置,到第二个资源的定义的开始位置结束位置。所以我们这里就应该是这样*/

imagecopyresampled($source, $thumb, $width-1, 0, $width, $height,0, 0,1, $height);

//保存的图片路径,要对应后缀名

$to_File = ‘chao.jpg’;

ImageJpeg($thumb,$to_File,100);//Imagepng  Imagegif

//回收资源

imagedestroy($thumb);

imagedestroy($source);

图片的操作还是挺浪费系统资源的,所以要做好资源的回收。Png,gif的图片也是一样的道理。其他方向的截取也是同理。不过也需要好好考虑。


原创粉丝点击