Heim >Backend-Entwicklung >PHP-Tutorial >php怎么生成缩略图

php怎么生成缩略图

PHPz
PHPzOriginal
2016-06-06 20:42:482451Durchsuche

php生成缩略图的方法:首先根据上传的文件类型调用函数;然后新建一个真彩色图像;接着重采样拷贝部分图像并调整大小;最后通过“imagecopyresampled()”方法将图像中的一块正方形区域拷贝到另一个图像中即可。

php怎么生成缩略图

php怎么生成缩略图?

代码示例:

<?php

/**
 * 生成缩略图函数(支持图片格式:gif、jpeg、png和bmp)
 * @author ruxing.li
 * @param  string $src      源图片路径
 * @param  int    $width    缩略图宽度(只指定高度时进行等比缩放)
 * @param  int    $width    缩略图高度(只指定宽度时进行等比缩放)
 * @param  string $filename 保存路径(不指定时直接输出到浏览器)
 * @return bool
 */
function mkThumbnail($src, $width = null, $height = null, $filename = null) {
    if (!isset($width) && !isset($height))
        return false;
    if (isset($width) && $width <= 0)
        return false;
    if (isset($height) && $height <= 0)
        return false;
    $size = getimagesize($src);
//返回图片文件的信息 
//Array
//(
//    [0] => 3264
//    [1] => 2448
//    [2] => 2
//    [3] => width="3264" height="2448"
//    [bits] => 8
//    [channels] => 3
//    [mime] => image/jpeg
//)
    if (!$size)
        return false;
    list($src_w, $src_h, $src_type) = $size;
    $src_mime = $size[&#39;mime&#39;];
    switch ($src_type) {
        case 1 :
            $img_type = &#39;gif&#39;;
            break;
        case 2 :
            $img_type = &#39;jpeg&#39;;
            break;
        case 3 :
            $img_type = &#39;png&#39;;
            break;
        case 15 :
            $img_type = &#39;wbmp&#39;;
            break;
        default :
            return false;
    }
    //等比例缩放
    if (!isset($width))
        $width = $src_w * ($height / $src_h);
    if (!isset($height))
        $height = $src_h * ($width / $src_w);
    //根据上传的文件的类型来调用不同函数
    $imagecreatefunc = &#39;imagecreatefrom&#39; . $img_type;
    $src_img = $imagecreatefunc($src);
    //新建一个真彩色图像
    $dest_img = imagecreatetruecolor($width, $height);
    //重采样拷贝部分图像并调整大小
    /**
     imagecopyresampled() 将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,
     因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。
     如果源和目标的宽度和高度不同,则会进行相应的图像收缩和拉伸。坐标指的是左上角。
     本函数可用来在同一幅图内部拷贝(如果 dst_image 和 src_image 相同的话)区域,但如果区域交迭的话则结果不可预知。
    */
    imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $width, $height, $src_w, $src_h);
    $imagefunc = &#39;image&#39; . $img_type;
    if ($filename) {
        $imagefunc($dest_img, $filename);
    } else {
        header(&#39;Content-Type: &#39; . $src_mime);
        $imagefunc($dest_img);
    }
    //销毁文件资源
    imagedestroy($src_img);
    imagedestroy($dest_img);
    return true;
}

$result = mkThumbnail(&#39;./demo.JPG&#39;, 147, 147, &#39;./thumbnail.jpg&#39;);

更多相关技术文章,请访问PHP中文网

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn