PHP图片处理之图片背景、画布操作

像验证码或根据动态数据生成统计图标,以及前面介绍的一些GD库操作等都属于动态绘制图像。而在web开发中,也会经常去处理服务器中已存在的图片。例如,根据一些需求对图片进行缩放、加水印、裁剪、翻转和旋转等改图的操作。在web应用中,经常使用的图片格式有GIF、JPEG和PNG中的一种或几种,当然GD库也可以处理其他格式的图片,但都很少用到。所以安装GD库时,至少安装GIF、JPEG或PNG三种格式中的一种。

  在前面介绍的画布管理中,使用imagecreate()和imageCreateTrueColor()两个函数去创建画布资源。但如果需要对自己已有的图片进行处理,只要将这个图片作为画布资源即可,也就是我们所说的创建图片背景。可以通过下面介绍的几个函数,打开服务器或网络文件中已经存在的GIF、JPEG和PNG图像,返回一个图像标识符,代表了从给定的文件名取得的图像作为操作的背景资源。它们的原型如下所示,它们在失败时都会返回一个空字符串,并且输出一条错误信息。

代码如下:

  resource  imagecreatefromjpeg(string $filename)           //从JPEG文件或URL新建一图像
  resource  imagecreatefrompng(string $filename)             //从PNG文件或URL新建一图像
  resource  imagecreatefromgif(string $filename)            //从GIF文件或URL新建一图像

  不管使用哪个函数创建的图像资源,用完以后都需要使用imagedestroy()函数进行销毁。再有就是图片格式对应的问题,任何一种方式打开的图片资源都可以保存为同一种格式。例如,对于使用imagecreatefromjpeg()函数创建的图片资源,可以使用imagepng()函数以PNG格式将图像输出到浏览器或文件。当然最好是打开的是哪种格式的图片,就保存成对应的图片格式。如果要做到这一点,我们还需要先认识一下getimagesize()函数,通过图片名称就可以获取图片的类型、宽度和高度等。该函数的原型如下所示:

代码如下:

  array  getimagesize(string filename[,array &imageinfo])             //获取图片的大小和类型

  如果不能访问filename指定的图像或者其不是有效图像,该函数将返回FALSE并产生一条E_WARNING级的错误。如果不出错,getimagesize()返回一个具有四个单元的数组,索引0包含图像宽度的像素值,索引1包含图像高度的索引值,索引2是图像类型的标记:1=GIF,2=JPG,3=PNG,4=SWF等,索引3是文本字符串,内容为“height=”yyy”  width=”xxx””,可以直接用于<IMG>标记。如下所示:

代码如下:

<?php
list($width,$height,$type,$attr) = getimagesize("image/brophp.jpg");
echo "<img src='image/brophp.jpg'".$attr.">";
?>

  下面的例子声明一个image()函数,可以打开GIF、JPG和PNG中任意格式的图片,并在图片的中间加上一个字符串后,保存成原来的格式(文字水印)。在以后的开发中,如果需要同样的操作(打开的是哪种格式的图片,也保存成对应格式的文件),可以参与本例的模式,代码如下所示:

代码如下:

<?php
    //向不同格式的图片中间画一个字符串(也是文字水印)
    function image($filename,$string){
        //获取图片的属性,第一个宽度,第二个高度,类型1=>gif,2=>jpeg,3=>png
        list($width,$height,$type) = getimagesize($filename);
        //可以处理的图片类型
        $types = array(1=>"gif",2=>"jpeg",3=>"png",);
        //通过图片类型去组合,可以创建对应图片格式的,创建图片资源的GD库函数
        $createfrom = "imagecreatefrom".$types[$type];
        //通过“变量函数”去打对应的函数去创建图片的资源
        $image = $createfrom($filename);
        //设置居中字体的X轴坐标位置
        $x = ($width-imagefontwidth(5)*strlen($string))/2;
        //设置居中字体的Y轴坐标位置
        $y = ($height-imagefontheight(5))/2;
        //设置字体的颜色为红色
        $textcolor = imagecolorallocate($image, 255, 0, 0);
        //向图片画一个指定的字符串
        imagestring($image, 5, $x, $y, $string, $textcolor);
        //通过图片类型去组合保存对应格式的图片函数
        $output = "image".$types[$type];
        //通过变量函数去保存对应格式的图片
        $output($image,$filename);
        imagedestroy($image);
    }
    image("brophp.gif","GIF");
    image("brophp.jpg", "JPEG");
    image("brophp.png", "PNG");
?>

(0)

相关推荐

  • 使用PHP生成二维码的两种方法(带logo图像)

    一.利用Google API生成二维码  Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: $urlToEncode="http://www.jb51.net"; generateQRfromGoogle($urlToEncode); /** * google api 二维码生成[QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式] * @param string $chl 二维码包含的信息,可以是数字.字符.二进制信

  • PHP实现生成透明背景的PNG缩略图函数分享

    之前在WEB开发笔记写过一个PHP生成缩略图的函数,虽然那个函数能够生成缩略图,但是有一定的缺陷,在生成PNG缩略图的时候,背景是黑色,今天又写了一个函数来弥补一下.代码很简单,就是imagealphablending($thumb,false);与imagesavealpha($thumb,true);很重要.主要就是把PNG的alpha值保存,不要丢失而已. 函数如下: <?PHP /* *$sourePic:原图路径 * $smallFileName:小图名称 * $width:小图宽 *

  • PHP实现生成带背景的图形验证码功能

    本文实例讲述了PHP实现生成带背景的图形验证码功能.分享给大家供大家参考,具体如下: 以前我们利用php生成的都是无背景或同一色彩背景的验证码了,但这种验证容易给机器识别了,这里就来介绍一些生成带背景的图形验证码实例. 1.产生一张png的图片, 2.为图片设置背景色, 3.设置字体颜色和样式, 4.产生4位数的随机的验证码, 5.把产生的每个字符调整旋转角度和位置画到png图片上, 6.加入噪点和干扰线防止注册机器分析原图片来恶意注册, 7.输出图片, 8.释放图片所占内存 authcode.

  • PHP实现批量生成App各种尺寸Logo

    使用PHP GD,使用良好,一键剪裁各种尺寸,打包下载.经常换icon的懂的,美工给你一个1024的logo,你得ps出各种尺寸,于是有了这个东西. 核心代码 复制代码 代码如下: <?php class image {     /**      * source image      *      * @var string|array      */     private $source;     /**      * temporay image      *      * @var f

  • php实现背景图上添加圆形logo图标的方法

    本文实例讲述了php实现背景图上添加圆形logo图标的方法.分享给大家供大家参考,具体如下: 说一下步骤: 总共分 3 步: 1. 压缩logo 成固定大小的方形图片 2. 将logo 转成圆形logo 3. 将logo与背景图合并 废话不多说,直接上代码: <?php /** * 作者:friker * 开发时间:20160516 * 功能:图片处理 * */ class ImageController extends CI_Controller{ public function __cons

  • Thinkphp3.2.3整合phpqrcode生成带logo的二维码

    Thinkphp中没有二维码相关的库,因此我们可以通过整合phpqrcode来完成生成二维码的功能. 下载phpqrcode 下载地址:http://phpqrcode.sourceforge.net/ 整合到Thinkphp框架 在"ThinkPHP\Library\Vendor\"下新建目录phpqrcode,将压缩包内容解压到该文件夹下. 调用phpqrcode生成二维码 在IndexController控制器下添加如下方法: public function qrcode($ur

  • PHP实现对png图像进行缩放的方法(支持透明背景)

    本文实例讲述了PHP实现对png图像进行缩放的方法.分享给大家供大家参考.具体实现方法如下: function smart_resize_image( $file, $width = 0, $height = 0, $proportional = false, $output = 'file', $delete_original = true, $use_linux_commands = false ) { if ( $height <= 0 && $width <= 0 )

  • PHP基于phpqrcode生成带LOGO图像的二维码实例

    本文实例讲述了PHP基于phpqrcode生成带LOGO图像的二维码.分享给大家供大家参考.具体如下: 这里PHP使用phpqrcode生成带LOGO图像的二维码,使用起来很方便,代码中含 生成不带Logo的标准二维码和生成带Logo的二维码,可根据注释修改使用. <?php include ('phpqrcode.php'); $value = 'http://www.codesc.net';//二维码数据 $errorCorrectionLevel = 'L';//纠错级别:L.M.Q.H

  • php生成带logo二维码方法小结

    一.使用的类库 1.phpqrcode(php库) 2.qrcode.js(javascript库) 二.phpqrcode的使用 只用php的类库,也就是二维码的生成在后台操作.因为要在后台生成带logo的二维码,那么首先必须将logo图片上传至服务器(在上传这里我用了webuploader) phpqrcode使用方法: 首先下载phpqrcode:http://phpqrcode.sourceforge.net/ 然后在使用之前记得引入phpqrcode.php文件 $value = $u

  • PHP下通过QRCode类库创建中间带网站LOGO的二维码

    我们要生成二维码都需要借助一些类库来实现了,下面我介绍利用PHP QR Code生成二维码吧,生成方法很简单,下面我来介绍一下. 利用php类库PHP QR Code来实现,不需要装额外的php扩展,首先下载类库包,有时候地址打不开,地址:http://phpqrcode.sourceforge.net/ 下载: 国内下载:http://www.jb51.net/codes/189897.html 国外下载:http://sourceforge.net/projects/phpqrcode/ 例

  • php缩放gif和png图透明背景变成黑色的解决方法

    工作中需要缩放一些gif图然后在去Imagecopymerge,可是发现使用了imagecreatetruecolor和imagecopyresampled后发现背景图不对,本来透明的背景图变成了黑色,后来发现做一些修改才可以: $img = imagecreatetruecolor(200, 200); //2.上色 $color=imagecolorallocate($img,255,255,255); //3.设置透明 imagecolortransparent($img,$color);

随机推荐