Skip to content

Commit 6f0308c

Browse files
committed
add spatie image conversion
1 parent 436cdc4 commit 6f0308c

File tree

2 files changed

+88
-1
lines changed

2 files changed

+88
-1
lines changed

src/Definitions/MediaConversionFFmpeg.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ public function handle(
6666
return null;
6767
}
6868

69-
$fileName = $this->fileName;
7069
$manipulate = $this->manipulate;
7170

71+
$fileName = $this->fileName;
7272
$newFile = $fileName($media, $parent);
7373

7474
$ffmpeg = FFMpeg::fromFilesystem($filesystem)
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Elegantly\Media\Definitions;
6+
7+
use Closure;
8+
use Elegantly\Media\Enums\MediaType;
9+
use Elegantly\Media\Models\Media;
10+
use Elegantly\Media\Models\MediaConversion;
11+
use Illuminate\Contracts\Filesystem\Filesystem;
12+
use Spatie\Image\Enums\ImageDriver;
13+
use Spatie\Image\Image;
14+
use Spatie\TemporaryDirectory\TemporaryDirectory as SpatieTemporaryDirectory;
15+
16+
class MediaConversionSpatieImage extends MediaConversionDefinition
17+
{
18+
/**
19+
* @param Closure(Image $image):void $manipulate
20+
* @param Closure(Media $media, ?MediaConversion $parent):string $fileName
21+
*/
22+
public function __construct(
23+
public string $name,
24+
public Closure $manipulate,
25+
public Closure $fileName,
26+
public ImageDriver $driver,
27+
public null|bool|Closure $when = null,
28+
public ?Closure $onCompleted = null,
29+
public bool $immediate = true,
30+
public bool $queued = true,
31+
public ?string $queue = null,
32+
public array $conversions = [],
33+
) {
34+
35+
parent::__construct(
36+
name: $name,
37+
handle: fn () => null,
38+
when: $when,
39+
onCompleted: $onCompleted,
40+
immediate: $immediate,
41+
queued: $queued,
42+
queue: $queue,
43+
conversions: $conversions
44+
);
45+
}
46+
47+
public function shouldExecute(Media $media, ?MediaConversion $parent): bool
48+
{
49+
if ($this->when !== null) {
50+
return parent::shouldExecute($media, $parent);
51+
}
52+
53+
$source = $parent ?? $media;
54+
55+
return $source->type === MediaType::Image;
56+
}
57+
58+
public function handle(
59+
Media $media,
60+
?MediaConversion $parent,
61+
?string $file,
62+
Filesystem $filesystem,
63+
SpatieTemporaryDirectory $temporaryDirectory
64+
): ?MediaConversion {
65+
if (! $file) {
66+
return null;
67+
}
68+
69+
$manipulate = $this->manipulate;
70+
71+
$fileName = $this->fileName;
72+
$newFile = $fileName($media, $parent);
73+
74+
$image = Image::load($filesystem->path($file));
75+
76+
$manipulate($image);
77+
78+
$image->save($filesystem->path($newFile));
79+
80+
return $media->addConversion(
81+
file: $filesystem->path($newFile),
82+
conversionName: $this->name,
83+
parent: $parent,
84+
);
85+
86+
}
87+
}

0 commit comments

Comments
 (0)