一、成比例缩小图像

<?php

/* 创建缩略图 */

$file = __DIR__.'/button.png';
$scale = 0.5; // 比例 $image = ImageCreateFromPNG($file);
$thumbnail = ImageCreateTrueColor(
ImageSX($image) * $scale,
ImageSY($image) * $scale
); // 保留透明度
ImageColorTransparent($thumbnail,
ImageColorAllocateAlpha($thumbnail, 0, 0, 0, 127)
);
ImageAlphaBlending($thumbnail, false);
ImageSaveAlpha($thumbnail, true); // 缩小 & 复制
ImageCopyResampled($thumbnail, $image, 0, 0, 0, 0,
ImageSX($thumbnail), ImageSY($thumbnail), ImageSX($image), ImageSY($image)
); header('Content-type: image/png');
ImageJpeg($thumbnail);
ImageDestroy($image);
ImageDestroy($thumbnail);

说明:

ImageCopyResampled() 函数用于重采样拷贝部分图像并调整大小

ImageColorAllocateAlpha() 函数用于为一副图像分配颜色 + Alpha

ImageAlphaBlending() 函数设定图像的混色模式  

二、缩小为固定大小的矩形

<?php

/* 创建固定大小的缩略图 */

$file = __DIR__.'/button.png';
$w = 50;
$h = 20; // 图像
$original = ImageCreateFromPNG($file);
$thumbnail = ImageCreateTrueColor($w, $h); // 保留透明设置
ImageColorTransparent($thumbnail,
ImageColorAllocateAlpha($thumbnail, 0, 0, 0, 127)
);
ImageAlphaBlending($thumbnail, false);
ImageSaveAlpha($thumbnail, true); // 缩小 & 复制
$x = ImageSX($original);
$y = ImageSY($original);
$scale = min($x / $w, $y / $h); ImageCopyResampled($thumbnail, $original,
0, 0, ($x - ($w * $scale)) / 2, ($y - ($h * $scale)) / 2,
$w, $h, $w * $scale, $h * $scale
); header('Content-type: image/png');
ImageJpeg($thumbnail);
ImageDestroy($image);
ImageDestroy($thumbnail);

说明:

该方法会从图像的中心成比例地修剪出尽可能大的矩形,需要计算原图和缩略图宽度和高度之比,找出其中较小的值。

从图像中心减去矩形的一般,得出在原图中的偏移量:($x - ($w * $scale)) / 2 和 ($y - ($h * $scale)) / 2

参考:

<PHP Cookbook>3'rd  

PHP 创建缩略图的更多相关文章

  1. php 使用GD库上传图片以及创建缩略图

    php 使用GD库上传图片以及创建缩略图   GD库是PHP进行图象操作一个很强大的库. 先在php.ini里增加一行引用:extension=php_gd2.dll 重启apache.做一个测试页 ...

  2. 使用GDI+轻松创建缩略图

    Gdi+ 还是相当好用的. 1> Image保存图像,需要一个CLSID的参数,它可以这样获得: int   GetEncoderClsid(const   WCHAR*   format,   ...

  3. Win+PHP+IECapt完整实现网页批量截图并创建缩略图

    最近在开发一个本地互联网应用的项目,为了增加用户体验,需要在搜索结果左侧显示如图一所示的某个网站的缩略图效果,在网上不停地百度谷歌了一上午后,发现大多数实现少量截图还是可以的,如果大批量的截图总会在中 ...

  4. c# 创建缩略图

    /// <summary> /// 创建缩略图 /// </summary> /// <param name="srcFileName">< ...

  5. JavaScript with Image:创建缩略图

    当图片很大,直接把图片从Server下载到浏览器上看是一种很不明智的做法,浪费了服务器的资源,网络带宽和客户端的资源.所以,通常Server和Client之间会传输缩略图,只有当Client请求某张图 ...

  6. python创建缩略图和选择轮廓效果

    # -*- encoding:utf-8 -*- ''' 改变颜色 --- 颜色反转''' from PIL import Image nest = Image.open("D:\\tk.j ...

  7. 使用 Amazon S3 触发器创建缩略图

    使用 Amazon S3 触发器创建缩略图 环境 centos (注意,必须是Linux环境) node12.x 安装教程 curl -sL https://rpm.nodesource.com/se ...

  8. scrapy下载图片到自己的目录,创建缩略图,存储入库

    环境和工具:python2.7,scrapy 实验网站:http://www.27270.com/tag/333.html  爬去所有兔女郎图片,下面的推荐需要过滤 逻辑:分析网站信息,下载图片和入库 ...

  9. JS创建缩略图

    <script language="javascript"> //显示缩略图 function DrawImage(ImgD,width_s,height_s){ /* ...

随机推荐

  1. JS事件对象与事件委托

    事件对象 包含事件相关的信息,如鼠标.时间.触发的DOM对象等 js默认将事件对象封装好,并自动的以参数的形式,传递给事件处理函数的第1个参数,如下: document.getElementsByTa ...

  2. 可以正确显示表格线的Grid item view

    Android上要显示一个表格,没有Swing那么专门的JTable可用. 搜了下,一般用GridView,有诸多不便和需要自己实现的地方: 跟ListView一样的Adapter,getView的时 ...

  3. CentOS7 词典

    goldendict sudo yum install goldendict打开goldendict,阅读welcome,添加本地词典,在http://abloz.com/huzheng/stardi ...

  4. ios原声音频播放AVAudioSession 总结

    //音频播放/*英译:record:录音 */ 1 导入头文件#import<AVFoundation/AVFoundation.h>//AVAudioSession是一个单例模式.在IO ...

  5. PHP探针

    来自LNMP.org 探针p.php 代码: <?php error_reporting(0); //抑制所有错误信息 @header("content-Type: text/html ...

  6. python多线程编程

    Python多线程编程中常用方法: 1.join()方法:如果一个线程或者在函数执行的过程中调用另一个线程,并且希望待其完成操作后才能执行,那么在调用线程的时就可以使用被调线程的join方法join( ...

  7. Spring整合web开发

    正常整合Servlet和Spring没有问题的 public class UserServlet extends HttpServlet { public void doGet(HttpServlet ...

  8. mux复用 demux解复用

    保存音频包: 直接输出解复用之后的的音频数据码流.只需要在每次调用av_read_frame()之后将得到的音频的AVPacket存为本地文件即可. 但在分离AAC码流的时候,直接存储AVPacket ...

  9. CodeForces 103D 分块处理

    题目链接:http://codeforces.com/problemset/problem/103/D 题意:给定一个长度为n的序列.然后q个询问.每个询问为(a,b),表示从序列第a项开始每b项的加 ...

  10. tangram2.6(XE2)\framework框架加载包异常 调试的地方

    添加以下的项目到项目组中, \tangram2.6(XE2)\framework\Core\Tangram_Core.dpk 调试此包的SysModuleMgr.pas的函数,本人还没有测试 func ...