amir-hossein5 / laravel-image
Requires
- php: ^7.4|^8.0
- intervention/image: ^2.7
- laravel/framework: ^8.0|^9.0
Requires (Dev)
- orchestra/testbench: ^6.0|^7.0
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);
它将返回 true
或 false
。
如果你创建了自己的结果数组 手动 传递数组中图像路径的键
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();