amir-hossein5/laravel-image

v2.2.0 2022-05-09 13:57 UTC

This package is auto-updated.

Last update: 2024-09-23 18:22:58 UTC


README

基于 intervention,轻松创建多种尺寸的图像。

例如

use AmirHossein5\LaravelImage\Facades\Image;

Image::make($request->image)
  ->setExclusiveDirectory('post')
  ->save();

它将按照配置文件中定义的尺寸保存你的图像,保存到路径

  • public/
    • images/post/2021/12/2/1638611107/
      • 1638611107_960_large.png
      • 1638611107_960_medium.png
      • 1638611107_960_small.png

先决条件

  • Laravel ^8.0|^9.0
  • PHP ^7.4|^8.0

安装

composer require amir-hossein5/laravel-image

并发布配置文件

php artisan vendor:publish --tag image

最后,你可以在配置中指定你的尺寸

'use_size' => 'imageSizes',

 'imageSizes' => [
    'large' => [
        'width' => '800',
        'height' => '600'
    ],
    'medium' => [
        'width' => '400',
        'height' => '300'
    ],
    'small' => [
        'width' => '80',
        'height' => '60'
    ]
],

"make" 方法

make 方法中,目录(存档路径(2021/12/2))和尺寸的默认值将被设置。因此,当你使用

use AmirHossein5\LaravelImage\Facades\Image;

Image::make($request->image) // or pass **Intervention object**
  ->setExclusiveDirectory('post')
  ->save();

保存到

  • public/
    • images/post/2021/12/2/1638611107/
      • 1638611107_960_large.png
      • 1638611107_960_medium.png
      • 1638611107_960_small.png

它将在存档路径(2021/12/2)中创建你的图像,并使用你在配置中定义的尺寸(在 use_size 部分)。但是如何自定义目录和尺寸。

有关尺寸自定义,请参阅 尺寸自定义

目录自定义

括号内写的是每个目录的名称

  • images(根目录)
  • /post(专用目录)
  • /2021/12/2/(存档目录)
  • /1638611107(sizesDirectory) -> 如果有多个尺寸

图像路径设置器

仅适用于 make

注意:根目录也可以在配置文件中更改。

示例

use AmirHossein5\LaravelImage\Facades\Image;

Image::make($image)
  ->setExclusiveDirectory('book')
  ->setRootDirectory('image')
  .
  .
  .
  ->save()

有关尺寸自定义,请参阅 尺寸自定义

"raw" 方法

当你使用 "raw" 方法时,

不会自动设置(存档路径(2021/12/2)和尺寸)。要设置图像的目录,

use AmirHossein5\LaravelImage\Facades\Image;

Image::raw($image) // or pass **Intervention object**
  ->in('book')
  ->save()
  
// without resizing
// will be save in public/book/ 

Image::raw($image)->save()
  
// without resizing
// will be save in public/

有关添加尺寸和尺寸自定义,请参阅 尺寸自定义

存储保存

要保存到存储文件夹,你可以使用配置中定义的磁盘

'disks' => [
    'public' => public_path(),
    'storage' => storage_path('app')
]

默认情况下是 public

use AmirHossein5\LaravelImage\Facades\Image;

$images = Image::make($image)
  ->setExclusiveDirectory('post')
  ->disk('storage')
  ->save();

将是

  • storage/app/
    • images/post/2021/12/2/1638611107/
      • 1638611107_960_large.png
      • 1638611107_960_medium.png
      • 1638611107_960_small.png

你可以添加更多磁盘并从中使用。

尺寸自定义

尺寸设置器

要自动调整大小,请使用 make 方法并在配置文件中定义尺寸(在 use_size 部分)。

默认尺寸

如果你想使用 default_size 功能,你可以在配置文件中定义它,或者在图像创建后

use AmirHossein5\LaravelImage\Facades\Image;

Image::setDefaultSizeFor($post->image, 'small');

将返回上一个数组,但 default_size 已更改或添加。

结果数组

在创建图像后,如果操作成功,它将返回一个数组,该数组的

index 键是数组或字符串(包含一个或多个)图像路径,这取决于尺寸的数量。

例如

[
  "index" => [
      "images/post/2021/12/08/1638966454/1638966454_491_large.png",
      "images/post/2021/12/08/1638966454/1638966454_491_meduim.png",
      "images/post/2021/12/08/1638966454/1638966454_491_small.png",
   ]
   // or 
   "index" => "image path"
   
   "imageDirectory" =>  "images/post/2021/12/08/1638966454"
   "default_size" => 'medium' 
   "disk" => 'public'
]

default_size 键当你使用 "default_size",并且有 多个尺寸 时,将是。

手动获取结果数组

use AmirHossein5\LaravelImage\Facades\Image;

Image::make($this->image)
  ->setExclusiveDirectory('post')
  ->save(false, function ($image) {
    return [
      'index' => $image->imagePath,
      'imageDirectory' => $image->imageDirectory,
      'disk' => $image->disk,
    ];
  });

输出

[
  "index" => [
      "images/post/2021/12/08/1638966454/1638966454_491_large.png",
      "images/post/2021/12/08/1638966454/1638966454_491_meduim.png",
      "images/post/2021/12/08/1638966454/1638966454_491_small.png",
   ]
   // or 
   "index" => "images/post/2021/12/08/1638966454/"
   
   "imageDirectory" => "images/post/2021/12/08/1638966454"
   "disk" => 'public'
]

属性

是否放大

如果你想使用 intervention 的放大功能,你应该

  ->save(true)

删除图像(s)

传递创建的图像

use AmirHossein5\LaravelImage\Facades\Image;

Image::rm($post->image);

它将返回 truefalse


如果你创建了自己的结果数组 手动 传递数组中图像路径的键

use AmirHossein5\LaravelImage\Facades\Image;

$image = Image::make($this->image)
  ->setExclusiveDirectory('post')
  ->save(false, function ($image) {
    return ['paths' => $image->imagePath];
  });
  
Image::rm($image, 'paths');

或者如果它是一个字符串路径,只需传递它

use AmirHossein5\LaravelImage\Facades\Image;

$image = Image::raw($this->image)
  ->in('post/test')
  ->save(false, function ($image) {
    return $image->imagePath;
  });
  
Image::rm($image);

以检查它是否被删除

use AmirHossein5\LaravelImage\Facades\Image;

if (! Image::rm($image)) {
  // ...
}
use AmirHossein5\LaravelImage\Facades\Image;

if (! Image::wasRecentlyRemoved()) {
  // ...
}

当使用磁盘时删除

如果你使用某些磁盘创建图像,请这样做

use AmirHossein5\LaravelImage\Facades\Image;

....
  ->disk('storage')
....
  
Image::disk('storage')->rm($image);

替换图像(s)

replace 方法与 save 方法类似,但如果存在与该图像同名图像,则将替换它。

use AmirHossein5\LaravelImage\Facades\Image;

$image = Image::raw($this->image)
    ->be('logo.png')
    ->replace(); 

它也适用于多个图像。

图像质量

所有文件类型均被标准化到一个范围,从0(质量差,文件小)到100(质量好,文件大)。只有当您编码JPG格式时,质量才会生效,因为PNG压缩是无损的,不会影响图像质量。默认值为90。

  ->quality(90)

事务

如果在事务封闭期间抛出异常,事务将自动回滚,并重新抛出异常。如果封闭执行成功,事务将自动提交。

use AmirHossein5\LaravelImage\Facades\Image;

Image::transaction(function () {
  Image::raw($image)->save();
});

最大尝试次数

transaction 方法接受一个可选的第二个参数,该参数定义了当发生死锁时,事务应该重试的次数。

use AmirHossein5\LaravelImage\Facades\Image;

Image::transaction(function () {
  Image::raw($image)->save();
}, maxAttempts: 4);

手动使用事务

手动开始事务

use AmirHossein5\LaravelImage\Facades\Image;

Image::beginTransaction();

您可以通过rollBack方法回滚事务

use AmirHossein5\LaravelImage\Facades\Image;

Image::rollBack();

最后,您可以通过commit方法提交事务

use AmirHossein5\LaravelImage\Facades\Image;

Image::commit();

测试

如果您不想创建图像,请在代码中使用假的

use AmirHossein5\LaravelImage\Facades\Image;

Image::fake();

Image:: ...

示例

use AmirHossein5\LaravelImage\Facades\Image;

$request['image'] = Image::make($request['image'])
  ->setExclusiveDirectory('post')
  ->save();

if (!$request['image']) {
  return back()
    ->withInput()
    ->withErrors(['image' => __('validation.uploaded')]);
}

Post::create($request);
use AmirHossein5\LaravelImage\Facades\Image;

if(!Image::rm($post->image)){
  return back()->with('fail message');
}

$post->delete;
use AmirHossein5\LaravelImage\Facades\Image;

$image = Image::setDefaultSizeFor($post->image, $request['default_size']);

if (!$image) {
  return back()
    ->withInput()
    ->withErrors(['image' => __('validation.uploaded')]);
}

$post->image = $image;
$post->save();
use AmirHossein5\LaravelImage\Facades\Image;

$request['icon'] = Image::raw($request['icon'])
    ->be('icon.png')
    ->replace(false, function ($image) {
        return $image->imagePath;
    });
    
if (!$request['icon']) {
  return back()
    ->withInput()
    ->withErrors(['image' => __('validation.uploaded')]);
}
use AmirHossein5\LaravelImage\Facades\Image;

$img = Intervention::make('https://avatars.githubusercontent.com/u/68776630?s=40&v=4');

$avatar = Image::raw($img)
    ->in('avatar')
    ->save();

许可证

许可证