PHP图片缩放函数:实现等比例不失真缩放

  在PHP网站开发过程中,如果你建立的网站涉及大量的图片处理,必然涉及到图片上传,缩放,而如何保持图片不失真,是很多初级PHP网站开发者比较头疼的一件事,今天David就和大家分享一下如何进行图片缩放。使用之前你需要下载安装GD库,以支持PHP图片处理。下面我们结合代码讲解具体的PHP图片缩放处理的思路。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
function resizeImage($im,$maxwidth,$maxheight,$name,$filetype)
{
    $pic_width
= imagesx($im);
    $pic_height
= imagesy($im);

    if(($maxwidth
&&
$pic_width
>
$maxwidth)

($maxheight
&&
$pic_height
>
$maxheight))
    {
        if($maxwidth
&&
$pic_width>$maxwidth)
        {
            $widthratio
=
$maxwidth/$pic_width;
            $resizewidth_tag
=
true;
        }

        if($maxheight
&&
$pic_height>$maxheight)
        {
            $heightratio
=
$maxheight/$pic_height;
            $resizeheight_tag
=
true;
        }

        if($resizewidth_tag
&&
$resizeheight_tag)
        {
            if($widthratio<$heightratio)
                $ratio
=
$widthratio;
            else
                $ratio
=
$heightratio;
        }

        if($resizewidth_tag
&&
!$resizeheight_tag)
            $ratio
=
$widthratio;
        if($resizeheight_tag
&&
!$resizewidth_tag)
            $ratio
=
$heightratio;

        $newwidth
=
$pic_width
*
$ratio;
        $newheight
=
$pic_height
*
$ratio;

        if(function_exists("imagecopyresampled"))
        {
            $newim
= imagecreatetruecolor($newwidth,$newheight);
           imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);
        }
        else
        {
            $newim
= imagecreate($newwidth,$newheight);
           imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);
        }

        $name
=
$name.$filetype;
        imagejpeg($newim,$name);
        imagedestroy($newim);
    }
    else
    {
        $name
=
$name.$filetype;
        imagejpeg($im,$name);
    }          
}

参数说明

$im 图片对象,应用函数之前,你需要用imagecreatefromjpeg()读取图片对象,如果PHP环境支持PNG,GIF,也可使用imagecreatefromgif(),imagecreatefrompng()

$maxwidth 定义生成图片的最大宽度(单位:像素)

$maxheight 生成图片的最大高度(单位:像素)

$name 生成的图片名

$filetype 最终生成的图片类型(.jpg/.png/.gif)

代码注释

第3~4行:读取需要缩放的图片实际宽高

第8~26行:通过计算实际图片宽高与需要生成图片的宽高的压缩比例最终得出进行图片缩放是根据宽度还是高度进行缩放,当前程序是根据宽度进行图片缩放。如果你想根据高度进行图片缩放,你可以将第22行的语句改成$widthratio>$heightratio

第28~31行:如果实际图片的长度或者宽度小于规定生成图片的长度或者宽度,则要么根据长度进行图片缩放,要么根据宽度进行图片缩放。

第33~34行:计算最终缩放生成的图片长宽。

第36~45行:根据计算出的最终生成图片的长宽改变图片大小,有两种改变图片大小的方法:ImageCopyResized()函数在所有GD版本中有效,但其缩放图像的算法比较粗糙。ImageCopyResamples(),其像素插值算法得到的图像边缘比较平滑,但该函数的速度比ImageCopyResized()慢。

第47~49行:最终生成经过处理后的图片,如果你需要生成GIF或PNG,你需要将imagejpeg()函数改成imagegif()或imagepng()

第51~56行:如果实际图片的长宽小于规定生成的图片长宽,则保持图片原样,同理,如果你需要生成GIF或PNG,你需要将imagejpeg()函数改成imagegif()或imagepng()。

特别说明

  GD库1.6.2版以前支持GIF格式,但因GIF格式使用LZW演算法牵涉专利权,因此在GD1.6.2版之后不支持GIF的格式。如果你是WINDOWS的环境,你只要进入PHP.INI文件找到extension=php_gd2.dll,将#去除,重启APACHE即可,如果你是Linux环境,又想支持GIF,PNG,JPEG,你需要去下载libpng,zlib,以及freetype字体并安装。

  OK,PHP图片压缩函数完成,最后我们概述一下整个处理的思路:

  通过计算实际图片的长宽与规定生成图片的长宽之间的缩放比例,根据实际的需求(按照宽度还是按照高度进行图片缩放)计算出最终生成图片的大小,然后应用PHP图片处理函数对图片进行处理,最后输出图片。

  以上就是关于PHP图片处理中如何对图片进行压缩并保持不失真的函数说明,有疑问或者好的建议欢迎给我留言,下次我将分享在PHP网站开发建设完成后,由于图片目录没有规划好,我们该如何对图片进行迁移的思路。

  :PHP网站开发教程-leapsoul.cn版权所有,转载时请以链接形式注明原始出处及本声明,谢谢。

时间: 2024-10-28 12:12:41

PHP图片缩放函数:实现等比例不失真缩放的相关文章

PHP自定义图片缩放函数实现等比例不失真缩放的方法_php技巧

本文实例讲述了PHP自定义图片缩放函数实现等比例不失真缩放的方法.分享给大家供大家参考,具体如下: function resizeImage($im,$maxwidth,$maxheight,$name,$filetype) { $pic_width = imagesx($im); $pic_height = imagesy($im); if(($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_he

php实现等比例不失真缩放上传图片的方法_php技巧

本文实例分析了php实现等比例不失真缩放上传图片的方法.分享给大家供大家参考,具体如下: 有时上传图片时因为图片太大了,不仅占用空间,消耗流量,而且影响浏(图片的尺寸大小不一).下面分享一种等比例不失真缩放图片的方法,这样,不管上传的图片尺有多大,都会自动压缩到我们设置尺寸值的范围之内.经过测试,证明实用. <?php function resizeImage($im,$maxwidth,$maxheight,$name,$filetype) { $pic_width = imagesx($im

常用的php图片处理类(水印、等比缩放、固定高宽)分享_php实例

常用的php图片处理类(水印.等比缩放.固定高宽)分享 <?php //PHP 添加水印 & 比例缩略图 & 固定高度 & 固定宽度 类. class Image_process{ public $source; //原图 public $source_width; //原图宽度 public $source_height; //原图高度 public $source_type_id; public $orign_name; public $orign_dirname; //

PHP图片裁剪函数

 这篇文章主要介绍了PHP图片裁剪函数,同时保持图像不变形,需要的朋友可以参考下 为了完成图片上传之后自动的裁剪,然后在前台显示出裁剪出的图片. 需求如上,源码如下: 代码如下: *exif_imagetype -- 判断一个图像的类型 *说明:函数功能是把一个图像裁剪为任意大小的图像,图像不变形 * 参数说明:输入 需要处理图片的 文件名,生成新图片的保存文件名,生成新图片的宽,生成新图片的高 */ // 获得任意大小图像,不足地方拉伸,不产生变形,不留下空白 function my_imag

ASP用正则替换图片名称函数

用正则替换图片名称函数,例如将/img/abc.jpg里abc.jpg替换成S_abc.jpg,效果如下:想要替换为 /img/S_abc.jpg ,通过以下的函数可以实现. 以下是函数代码:function changepic(ss) Set re = New RegExp re.Pattern = "\B\/(\S+)(\.jpg|.gif|.png|.bmp)\b" re.Global = True re.IgnoreCase = True re.MultiLine = True

PHP图片水印函数:支持以图片和文字方式添加水印

今天是六一儿童节,嘿嘿,和大家分享下在PHP网站开发中经常用到的给图片添加水印的函数源码,由David编写,亲自测试通过,支持以图片和文字两种方式给图片添加水印.图片支持GIF,PNG,JPG三种格式,水印图片支持PNG和GIF.闲话少说,贴出我的PHP图片水印函数. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162

php实现的随机显示图片的函数

 本文分享一个php实现的随机显示图片的函数,可以将指定文件夹中存放的图片随机地显示出来 本节主要内容: 介绍一个随机显示图片的php函数,多用于博客的展示窗.照片的随机展示等.   例子:    代码如下: <?php /** * 功能:随机显示图片 * Filename  : img.php * Usage: *             <img src=img.php> *             <img src=img.php?folder=images2/> **

c#中调节图片亮度函数

问题描述 c#中调节图片亮度函数 这样编程为什么设置的亮度值无效,图片没有变化呢?是哪里出问题了吗?帮忙看一下吧 解决方案 直接拿你的图片和纯白色的alpha混合就可以了.

WEB关于鼠标滑过变化图片的函数swapImage中怎么调整切换图片的透明度问题

问题描述 WEB关于鼠标滑过变化图片的函数swapImage中怎么调整切换图片的透明度问题 这是body部分 <a href="javascript:show()" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Image12','','image/双子座.png',1)" ><img src="image/双子座1.jpg" widt