first(); if (!$fileList) { return false; } $fileContent = $fileList->fileContent()->first(); $file_url = $fileList->resolvedUrl(); $filename = $fileList->filename ?? $fileContent?->titlename ?? 'unknown_file'; $thumbnail = null; return [ 'url' => $file_url, 'name' => $filename, 'size' => $fileContent->size_in_bytes ?? 0, 'hashkey' => $fileList->hashkey, 'thumbnail' => $thumbnail ?? $file_url, ]; } public static function photoURLArraytoDropzoneData(array|false|null $PhotoURLArray) { if (empty($PhotoURLArray)) { return false; } $dropzoneArray = []; foreach ($PhotoURLArray as $hashkey) { $dropzoneArray[] = self::getDropzoneDetailsbyHashkey($hashkey) ?? []; } return $dropzoneArray; } function generateThumbnailGD(string $sourcePath, string $destinationPath, int $width = 200, int $height = 200): bool { if (!file_exists($sourcePath)) { return false; } $imageInfo = getimagesize($sourcePath); if (!$imageInfo) return false; [$srcWidth, $srcHeight] = $imageInfo; $mime = $imageInfo['mime']; // Create image resource from source switch ($mime) { case 'image/jpeg': $srcImage = imagecreatefromjpeg($sourcePath); break; case 'image/png': $srcImage = imagecreatefrompng($sourcePath); break; case 'image/gif': $srcImage = imagecreatefromgif($sourcePath); break; case 'image/webp': $srcImage = imagecreatefromwebp($sourcePath); break; default: return false; // unsupported } // Calculate new dimensions preserving aspect ratio $aspectRatio = $srcWidth / $srcHeight; if ($width / $height > $aspectRatio) { $width = (int)($height * $aspectRatio); } else { $height = (int)($width / $aspectRatio); } // Create the new thumbnail image $thumbImage = imagecreatetruecolor($width, $height); // Preserve transparency for PNG/GIF if (in_array($mime, ['image/png', 'image/gif'])) { imagecolortransparent($thumbImage, imagecolorallocatealpha($thumbImage, 0, 0, 0, 127)); imagealphablending($thumbImage, false); imagesavealpha($thumbImage, true); } // Resize imagecopyresampled($thumbImage, $srcImage, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight); // Save to file switch ($mime) { case 'image/jpeg': imagejpeg($thumbImage, $destinationPath, 85); break; case 'image/png': imagepng($thumbImage, $destinationPath); break; case 'image/gif': imagegif($thumbImage, $destinationPath); break; case 'image/webp': imagewebp($thumbImage, $destinationPath, 85); break; } // Cleanup imagedestroy($srcImage); imagedestroy($thumbImage); return true; } }