From de09deb35638e0ab1469011b2f7c274d922ea651 Mon Sep 17 00:00:00 2001 From: SANYE-YA <122528746+SANYE-CH@users.noreply.github.com> Date: Thu, 7 Aug 2025 05:23:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=8D=A2Imagick=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更换获取的GD数据为二进制 --- app/Http/Controllers/TextureController.php | 34 +++++++++++++++------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/TextureController.php b/app/Http/Controllers/TextureController.php index 6d4dfd93..20069f2b 100644 --- a/app/Http/Controllers/TextureController.php +++ b/app/Http/Controllers/TextureController.php @@ -62,22 +62,36 @@ class TextureController extends Controller 'preview-t'.$tid."-$format", option('enable_preview_cache') ? $now->addYear() : $now->addMinute(), function () use ($minecraft, $disk, $texture, $hash, $height, $usePNG) { - $file = $disk->get($hash); + $file = $disk->get($hash); + if ($texture->type === 'cape') { - $image = $minecraft->renderCape($file, $height); + $gdResource = $minecraft->renderCape($file, $height); } else { - $image = $minecraft->renderSkin($file, 12, $texture->type === 'alex'); - } + $gdResource = $minecraft->renderSkin($file, 12, $texture->type === 'alex'); + } + + ob_start(); + imagepng($gdResource); + $imageBlob = ob_get_clean(); + imagedestroy($gdResource); + + $imagick = new \Imagick(); + $imagick->readImageBlob($imageBlob); + - $lastModified = $disk->lastModified($hash); + if (!$usePNG) { + $imagick->setImageFormat('webp'); + } - // TODO: refactor - return \Intervention\Image\ImageManagerStatic::configure(['driver' => 'gd'])->make($image) - ->response($usePNG ? 'png' : 'webp', 100) - ->setLastModified(Carbon::createFromTimestamp($lastModified)); + $response = response($imagick->getImageBlob(), 200, [ + 'Content-Type' => $usePNG ? 'image/png' : 'image/webp', + 'Content-Length' => strlen($imagick->getImageBlob()), + ]); + $response->setLastModified(Carbon::createFromTimestamp($disk->lastModified($hash))); + return $response; } ); - + return $response; }