support HEIC/HEIF conversion auto JPEG
This commit is contained in:
+20
-3
@@ -608,15 +608,30 @@ class ArticleManager
|
|||||||
$mime = mime_content_type($uploadedFile['tmp_name']) ?: 'application/octet-stream';
|
$mime = mime_content_type($uploadedFile['tmp_name']) ?: 'application/octet-stream';
|
||||||
|
|
||||||
if (str_starts_with($mime, 'image/')) {
|
if (str_starts_with($mime, 'image/')) {
|
||||||
|
// HEIC/HEIF : converti en JPEG (non supporté nativement par les navigateurs)
|
||||||
|
if (in_array($mime, ['image/heic', 'image/heif'], true) && extension_loaded('imagick')) {
|
||||||
|
try {
|
||||||
|
$img = new \Imagick($uploadedFile['tmp_name']);
|
||||||
|
$img->setImageFormat('jpeg');
|
||||||
|
$img->setImageCompressionQuality(88);
|
||||||
|
$converted = tempnam(sys_get_temp_dir(), 'vl_heic_') . '.jpg';
|
||||||
|
$img->writeImage($converted);
|
||||||
|
$img->destroy();
|
||||||
|
$uploadedFile['tmp_name'] = $converted;
|
||||||
|
$mime = 'image/jpeg';
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// Échec conversion → stocke tel quel
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$ext = $this->extFromMime($mime)
|
$ext = $this->extFromMime($mime)
|
||||||
?? strtolower(pathinfo($uploadedFile['name'], PATHINFO_EXTENSION))
|
?? strtolower(pathinfo($uploadedFile['name'], PATHINFO_EXTENSION))
|
||||||
?: 'jpg';
|
?: 'jpg';
|
||||||
$hash = substr(hash_file('sha256', $uploadedFile['tmp_name']), 0, 16);
|
$hash = substr(hash_file('sha256', $uploadedFile['tmp_name']), 0, 16);
|
||||||
$size = $uploadedFile['size'] ?? filesize($uploadedFile['tmp_name']);
|
$size = filesize($uploadedFile['tmp_name']);
|
||||||
$name = "{$hash}-{$size}.{$ext}";
|
$name = "{$hash}-{$size}.{$ext}";
|
||||||
$dest = $dir . '/' . $name;
|
$dest = $dir . '/' . $name;
|
||||||
// Même hash = même contenu : pas de collision réelle
|
if (!rename($uploadedFile['tmp_name'], $dest) && !move_uploaded_file($uploadedFile['tmp_name'], $dest)) {
|
||||||
if (!move_uploaded_file($uploadedFile['tmp_name'], $dest)) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return $name;
|
return $name;
|
||||||
@@ -667,6 +682,8 @@ class ArticleManager
|
|||||||
'image/gif' => 'gif',
|
'image/gif' => 'gif',
|
||||||
'image/avif' => 'avif',
|
'image/avif' => 'avif',
|
||||||
'image/svg+xml' => 'svg',
|
'image/svg+xml' => 'svg',
|
||||||
|
'image/heic' => 'jpg',
|
||||||
|
'image/heif' => 'jpg',
|
||||||
default => null,
|
default => null,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user