一、成比例缩小图像

<?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. netty 解析http请求 post

    http://blog.csdn.net/neosmith/article/details/50383548

  2. 各大搜索引擎智能提示API(JSONP跨域实现自动补全搜索建议)

    ---------------------------------------搜索引擎JSONP接口--------------------------------------------- 提示:U ...

  3. 使用github pages, hexo搭建个人博客教程

    具体的原理性的东西就不说了直接上教程,怕等下自己忘了. 一. github 阶段 申请一个github 账号并成功登录进去. 创建一个名字为xxx.github.io的空项目. 二. hexo 阶段 ...

  4. C语言 链表排序

    #include <stdio.h> #include <stdlib.h> #include <assert.h> typedef struct node{ in ...

  5. Laravel 创建数据库

    1.根目录输入 php artisan migrate 2.创建表 php artisan migrate:make create_authors_table --table authors --cr ...

  6. C#中将DataTable转成List

    学习MVC的时候,使用List<T>来存储数据给前台,但是从数据库中直接读取得到的是DataTable,虽然可以直接循环DataTable来得到list,但是如果每个实体类都通过这样的得到 ...

  7. asp.net mvc 多级文件夹

    ASP.NET MVC - 定制属于你自己的ViewEngine 标签: asp.netmvcstring引擎razorapplication 2012-07-26 14:17 5365人阅读 评论( ...

  8. iOS创建自定义的xib视图,不带控制器调用

    1 我们平常使用视图都是在控制器中加载各种视图,但是有时候一个单独的视图,弄一个控制器未免有些显得太沉重了,所以我们现在来创建一个带xib加载视图的自定义视图 2 创建一个视图类集成uiview 3 ...

  9. 可以改变this指向的方法

    this一般指向的是当前被调用者,但也可以通过其它方式来改变它的指向,下面将介绍三种方式: 1.call用作继承时: function Parent(age){ this.name=['mike',' ...

  10. iOS离屏渲染简书

    更详细地址https://zsisme.gitbooks.io/ios-/content/chapter15/offscreen-rendering.html(包含了核心动画) GPU渲染机制: CP ...