zoukankan      html  css  js  c++  java
  • PHP 创建缩略图

    一、成比例缩小图像

    <?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  

  • 相关阅读:
    一句话搞定qt4 开发环境
    一句话随笔.....
    es6学习笔记(二)
    Vue学习笔记(一)
    es6学习笔记(一)
    Java中的一些基础概念
    你了解Java中String的substring函数吗?
    Ajax请求与浏览器缓存
    QCon杭州2012技术开发大会感受
    为什么选择使用Sass而不是Less?
  • 原文地址:https://www.cnblogs.com/dee0912/p/5463830.html
Copyright © 2011-2022 走看看