首页 > 解决方案 > 防止在 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 像素的图像,它还会生成mdlgxl图像。

如何防止大于上传图片宽度的媒体转换?

标签: laravelmedia-librarylaravel-medialibrary

解决方案


以下链接给出了这个问题的答案

Laracast 论坛

if ($this->width > 768) {
    $this->addMediaConversion('md')
        ->width(768);
}

if ($this->width > 1024) {
    $this->addMediaConversion('lg')
        ->width(1024);
} 

推荐阅读