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  

  • 相关阅读:
    Vue监视数据的原理
    JS 获取随机数
    Vue中的计算属性(computed)、方法(methods)、watch(侦听)
    Vue3中使用调试工具 Vue.js Devtools
    Vue3.X 新特性 Composition Api
    vue、js 保留小数点位数以及转化为百分比
    常用的网页布局之列表页
    CSS常见布局技巧
    2、C#入门第2课
    1、C#入门第一课
  • 原文地址:https://www.cnblogs.com/dee0912/p/5463830.html
Copyright © 2011-2022 走看看