php 做缩略图

php生成图片缩略图,最重要的一点是判断源图片的mime类型,并根据类型创建不同的图片资源

获取图片mime类型:
getimagesize()里的mine、get_headers()里的content-type,gd库里的exif_imagetype(),
获取图片的后缀;
pathinfo()里的extension,以及一些字符串切割处理函数

图片的后缀 不一定等于 图片的mime类型

<?php
/**
     * 生成图片缩略图
     *
     * @param array $param [
     *      'sFile' => '源图片的绝对地址',
     *      'dFile' => '缩略图存放的绝对地址',
     *      'newWidth' => '缩略图宽,单位像素点',
     *      'newHeight' => '缩略图高,单位像素点',
     * ]
     * @return bool|string
     */

    function generateThumbnail(array $param)
    {
        if (empty($param['sFile']) || !file_exists($param['sFile'])) {
            return FALSE;
        }

        $newWidth = $param['newWidth'] ?? 290;
        $newHeight = $param['newHeight'] ?? 73;

        $imageInfo = getimagesize($param['sFile']);

        if (empty($param['dFile'])) {
            $config = Service::getConfig();
            $fileInfo = explode('/', $param['sFile']);
            $fileNameInfo = explode('.', $fileInfo[count($fileInfo) - 1]);

            if ($imageInfo['mime'] == 'image/jpeg' || $imageInfo == 'image/jpg') {
                $extension = 'jpg';
            } elseif ($imageInfo['mime'] == 'image/png') {
                $extension = 'png';
            } else {
                $extension = '';
            }
            $fileName = $fileNameInfo[0] . '_' . $newWidth . '_' . $newHeight . '.' . $extension;

            $param['dFile'] = $config['application']['staticDir'] . 'thumbnail/' . $fileName;
            if (!file_exists($config['application']['staticDir'] . 'thumbnail')) {
                mkdir($config['application']['staticDir'] . 'thumbnails -l', 0755);
            }
        }
        if (file_exists($param['dFile'])) {
            return $param['dFile'];
        }

        if ($imageInfo['mime'] == 'image/jpeg' || $imageInfo == 'image/jpg') {
            $img = imagecreatefromjpeg($param['sFile']);
        } elseif ($imageInfo['mime'] == 'image/png') {
            $img = imagecreatefrompng($param['sFile']);
        } else {
            return FALSE;
        }

        $imgNew = imagecreatetruecolor($newWidth, $newHeight);

        imagecopyresized($imgNew, $img, 0, 0, 0, 0, floor($newWidth), floor($newHeight), $imageInfo[0], $imageInfo[1]);

        if ($imageInfo['mime'] == 'image/jpeg' || $imageInfo == 'image/jpg') {
            imagejpeg($imgNew, $param['dFile']);
        } else {
            imagepng($imgNew, $param['dFile']);
        }
        return $param['dFile'];
    }

Leave Comment

电子邮件地址不会被公开。 必填项已用*标注