laravel - 防止在 spatie 媒体库中生成过大的媒体
问题描述
我正在使用 Spatie 媒体库来管理我的 laravel 应用程序中的媒体。问题是即使上传的文件很小,它也会生成超大的图像,从而导致图像像素化。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
class Post extends Model implements HasMedia
{
use InteractsWithMedia;
public function registerMediaConversions(Media $media = null) : void
{
$this->addMediaConversion('thumb')
->width(100);
$this->addMediaConversion('xs')
->width(320);
$this->addMediaConversion('sm')
->width(640);
$this->addMediaConversion('md')
->width(768);
$this->addMediaConversion('lg')
->width(1024);
$this->addMediaConversion('xl')
->width(1280);
}
public function registerMediaCollections() : void
{
$this->addMediaCollection('images');
}
}
以上是我的型号代码。假设如果我上传宽度为 700 像素的图像,它还会生成md
、lg
和xl
图像。
如何防止大于上传图片宽度的媒体转换?
解决方案
以下链接给出了这个问题的答案
if ($this->width > 768) {
$this->addMediaConversion('md')
->width(768);
}
if ($this->width > 1024) {
$this->addMediaConversion('lg')
->width(1024);
}
推荐阅读
- android - 无法为 Android 构建 SDL2
- php - 使用索引从多维数组中提取一组值
- typescript - 如何遍历打字稿中的两个对象键?
- php - 将存储的时间字符串与 DateTime('now') 进行比较
- javascript - 如果元素与 puppeteer 存在,则单击元素
- angular - Angular 有什么方法可以在使用 *ngFor 生成的子组件中捕获事件一次,该子组件订阅了服务中的更改?
- swift - 通过拖动角来调整文本视图的大小 (Swift)
- vue.js - 如何修复无法编译 -Module 错误(来自 ./node_modules/eslint-loader/index.js):问题?
- python - getting attributes from model pipeline with nested pipeline and columntransformer
- android - 如何在 M1 Mac 上运行较旧的 api 29 android 模拟器(api 24、25 版本不起作用)