Compare commits
2 Commits
092eb09316
...
d245055bf4
| Author | SHA1 | Date | |
|---|---|---|---|
| d245055bf4 | |||
| 9c4dc0ff11 |
+103
-5
@@ -75,17 +75,115 @@ class Setting extends Model
|
||||
$this->attributes['value'] = $value ? '1' : '0';
|
||||
}
|
||||
|
||||
/**
|
||||
* Set value from different field names
|
||||
*/
|
||||
public function setValueFileAttribute($value)
|
||||
{
|
||||
// Filament bazen dosya yolunu array olarak döndürebilir, bu durumda ilk elemanı alıyoruz
|
||||
if (is_array($value)) {
|
||||
$this->attributes['value'] = array_values($value)[0] ?? null;
|
||||
$filePath = array_values($value)[0] ?? null;
|
||||
} else {
|
||||
$this->attributes['value'] = $value;
|
||||
$filePath = $value;
|
||||
}
|
||||
|
||||
if ($filePath && $this->key === 'hero_bg') {
|
||||
$filePath = $this->processHeroBackground($filePath);
|
||||
}
|
||||
|
||||
$this->attributes['value'] = $filePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the hero background image: convert to webp, resize if necessary, and compress.
|
||||
*/
|
||||
protected function processHeroBackground($filePath)
|
||||
{
|
||||
try {
|
||||
$disk = \Illuminate\Support\Facades\Storage::disk('public');
|
||||
if (!$disk->exists($filePath)) {
|
||||
return $filePath;
|
||||
}
|
||||
|
||||
$absolutePath = $disk->path($filePath);
|
||||
|
||||
// Get image info
|
||||
$imageInfo = @getimagesize($absolutePath);
|
||||
if (!$imageInfo) {
|
||||
return $filePath;
|
||||
}
|
||||
|
||||
$mimeType = $imageInfo['mime'];
|
||||
|
||||
// Create GD image resource based on mime type
|
||||
switch ($mimeType) {
|
||||
case 'image/jpeg':
|
||||
case 'image/jpg':
|
||||
$image = @imagecreatefromjpeg($absolutePath);
|
||||
break;
|
||||
case 'image/png':
|
||||
$image = @imagecreatefrompng($absolutePath);
|
||||
break;
|
||||
case 'image/webp':
|
||||
$image = @imagecreatefromwebp($absolutePath);
|
||||
break;
|
||||
case 'image/gif':
|
||||
$image = @imagecreatefromgif($absolutePath);
|
||||
break;
|
||||
default:
|
||||
return $filePath;
|
||||
}
|
||||
|
||||
if (!$image) {
|
||||
return $filePath;
|
||||
}
|
||||
|
||||
// Preserve transparency or handle it for webp if needed
|
||||
imagealphablending($image, true);
|
||||
imagesavealpha($image, true);
|
||||
|
||||
$originalWidth = imagesx($image);
|
||||
$originalHeight = imagesy($image);
|
||||
|
||||
// Target dimensions: Hero bg size, max width 1920px
|
||||
$maxWidth = 1920;
|
||||
if ($originalWidth > $maxWidth) {
|
||||
$newWidth = $maxWidth;
|
||||
$newHeight = (int) (($originalHeight / $originalWidth) * $maxWidth);
|
||||
|
||||
$resizedImage = imagecreatetruecolor($newWidth, $newHeight);
|
||||
|
||||
// Preserve transparency
|
||||
imagealphablending($resizedImage, false);
|
||||
imagesavealpha($resizedImage, true);
|
||||
|
||||
// Resize
|
||||
imagecopyresampled($resizedImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $originalWidth, $originalHeight);
|
||||
imagedestroy($image);
|
||||
$image = $resizedImage;
|
||||
}
|
||||
|
||||
// Generate new webp path
|
||||
$pathInfo = pathinfo($filePath);
|
||||
$newWebpPath = $pathInfo['dirname'] . '/' . $pathInfo['filename'] . '.webp';
|
||||
$absoluteWebpPath = $disk->path($newWebpPath);
|
||||
|
||||
// Save as webp with 80% quality (excellent quality-to-size ratio)
|
||||
if (imagewebp($image, $absoluteWebpPath, 80)) {
|
||||
imagedestroy($image);
|
||||
|
||||
// If the file extension changed, delete the original file
|
||||
if ($newWebpPath !== $filePath) {
|
||||
$disk->delete($filePath);
|
||||
}
|
||||
|
||||
return $newWebpPath;
|
||||
}
|
||||
|
||||
imagedestroy($image);
|
||||
} catch (\Exception $e) {
|
||||
// Log error or fallback to original
|
||||
\Illuminate\Support\Facades\Log::error('Hero background image processing failed: ' . $e->getMessage());
|
||||
}
|
||||
|
||||
return $filePath;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -74,6 +74,19 @@
|
||||
filter: brightness(1.4);
|
||||
transition: all 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
.glass-card h4 {
|
||||
color: white;
|
||||
transition: all 0.3s ease-in-out;
|
||||
text-shadow: 0px 1px 10px #00000080;
|
||||
}
|
||||
|
||||
.glass-card:hover h4 {
|
||||
color: black;
|
||||
transition: all 0.3s ease-in-out;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.glass-card:hover svg {
|
||||
filter: brightness(0.8);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user