php根据图片api动态生成图片

topthink/think-image
https://www.kancloud.cn/manual/thinkphp5/177530

根据拼接图片路径获取图片,这样可以减少图片服务器的带宽占用,常见有阿里云,七牛云的图像处理

例如 原图大小是720*720
http://192.168.0.24:63343/storage/avatar/20210531/8ac683182527aa520f0a8de8a9ff6a82.jpg

这样拿到的是360*360的
http://192.168.0.24:63343/storage/avatar/20210531/8ac683182527aa520f0a8de8a9ff6a82_360_360.jpg

需要修改
.htaccess文件
这个配置文件很强大,包括诸如服务器缓存,图片防盗链(一个是版权,一个也是减少服务器带宽占用),网络请求压缩html等等
https://blog.csdn.net/kakuma_chen/article/details/71465251

原理如下
https://www.cnblogs.com/heyue0117/p/12109669.html

1、开启apache的rewrite功能。
https://jingyan.baidu.com/article/8275fc868c1a7946a03cf6ef.html
小皮打开
在这里插入图片描述

2、修改.htaccess

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^storage/(.*)/(.*)/(.*)_(\d+)_(\d+).(png|jpg|jpeg|gif)$ /index/thumbnail/module/$1/date/$2/original/$3/width/$4/height/$5/ext/$6 [L,R]
  
</IfModule>

Index Conrtroller下的thumbnail方法

    public function thumbnail()
    {
        //$savePath = Config::get('attachment_path');
        $savePath = Filesystem::getDiskConfig('public','root').'/';
        $defaultImage = $savePath . 'default.ipg';
        $params = Request::instance()->param();
        $module = $params['module'];//图片所属模块
        $date = $params['date']; // 图片上传日期
        $original = $params['original']; // 原始图片名称(不含后缀)
        $width = $params['width']; // 目标图片宽度
        $height = $params['height'];// 目标图片高度
        $ext = $params['ext']; //图片后缀
        $originName = sprintf('%s%s/%s/%s.%s', $savePath, $module, $date, $original, $ext);
        $targetName = sprintf('%s%s/%s/%s_%s_%s.%s', $savePath, $module, $date, $original, $width, $height, $ext);
        if (!file_exists($originName)) {
            $originName = $defaultImage;
            $targetName = sprintf('%sdefault_%s_%s.ipg', $savePath, $width, $height);
        }
        $image = Image::open($originName);
        $thumb = $image->thumb($width, $height);
        if (!file_exists($targetName)) {
            $thumb->save($targetName);
        }
        $thumb->preview();
    }

composer依赖了topthink/think-image之后
库的Image.php新增扩展方法

/**
     * @param int $quality 图像质量
     * @param bool $interlace 是否对JPEG类型图像设置隔行扫描
     */
    public function preview($quality = 100, $interlace = true)
    {
        $type = $this->info['type'];
        header('content-type:' . $this->info['mime']);
        if ('jpeg' == $type || 'jpg' == $type) {
            //JPEG图像设置隔行扫描
            imageinterlace($this->im, $interlace);
            imagejpeg($this->im, null, $quality);
        } elseif ('gif' == $type && !empty($this->gif)) {
            imagegif($this->im, null);
        } elseif ('png' == $type) {
            //设定保存完整的 alpha 通道信息
            imagesavealpha($this->im, true);
            //ImagePNG生成图像的质量范围从0到9的
            imagepng($this->im, null, min((int)($quality / 10), 9));
        } else {
            $fun = 'image' . $type;
            $fun($this->im, '');
        }
        exit;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例代码,可以用来调用腾讯云cos存储桶api生成签名并存入图片: ``` <?php require_once 'cos-php-sdk-v5/vendor/autoload.php'; // 引入 SDK 自动加载文件 use Qcloud\Cos\Client; use Qcloud\Cos\Auth; // 配置参数 $bucket = 'your_bucket_name'; $region = 'your_region'; $secretId = 'your_secret_id'; $secretKey = 'your_secret_key'; // 创建 COS 客户端和认证对象 $cosClient = new Client([ 'region' => $region, 'credentials' => [ 'secretId' => $secretId, 'secretKey' => $secretKey ], 'scheme' => 'https' ]); $auth = new Auth($secretId, $secretKey); // 生成签名并上传图片 $filename = 'your_filename'; // 文件名 $filepath = 'your_filepath'; // 文件路径 $expired = time() + 3600; // 签名有效期,单位为秒 $sign = $auth->createReusableSignature($expired, [ 'bucket' => $bucket, 'region' => $region, 'method' => 'PUT', 'path' => '/' . $bucket . '/' . $filename, ]); // 生成签名 $response = $cosClient->putObject([ 'Bucket' => $bucket, 'Key' => $filename, 'Body' => fopen($filepath, 'rb'), 'ContentType' => 'image/jpeg', 'ACL' => 'public-read', 'CacheControl' => 'max-age=86400', 'Expires' => gmdate('D, d M Y H:i:s T', time() + 86400), 'Metadata' => [ 'x-cos-acl' => 'public-read', 'x-cos-storage-class' => 'STANDARD', ], 'headers' => [ 'Authorization' => $sign, ], ]); $url = $response['ObjectURL']; // 获取上传后的文件访问链接 ?> ``` 在这个示例代码中,我们首先引入了腾讯云cos存储桶的SDK自动加载文件。然后,我们设置了一些配置参数,包括存储桶名称、地域、secretId和secretKey等信息。接下来,我们创建了COS客户端和认证对象。在生成签名和上传图片时,我们使用了`createReusableSignature()`方法生成签名,并使用`putObject()`方法上传图片到存储桶。最后,我们获取了上传后的文件访问链接。 需要注意的是,这个示例代码只是一个简单的示例,实际使用时需要根据自己的需求进行适当修改。比如,可以根据需要设置上传文件的ACL、存储类型、缓存控制等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值