From 17c335238fecc2767cf0c78136a3ce49650c4520 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 9 Dec 2024 21:24:28 +0000 Subject: [PATCH] Fix PR 14591 - improve blurhash creation --- src/Contact/Avatar.php | 2 +- src/Model/Contact.php | 2 +- src/Model/Photo.php | 11 ++++++----- src/Model/Post/Link.php | 4 ++-- src/Object/Image.php | 12 ++++++------ src/Util/Images.php | 8 ++++---- 6 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/Contact/Avatar.php b/src/Contact/Avatar.php index 66930119e8..922b84ea6f 100644 --- a/src/Contact/Avatar.php +++ b/src/Contact/Avatar.php @@ -83,7 +83,7 @@ class Avatar $filename = self::getFilename($contact['url']); $timestamp = time(); - $fields['blurhash'] = $image->getBlurHash(); + $fields['blurhash'] = $image->getBlurHash($img_str); $fields['photo'] = self::storeAvatarCache($image, $filename, Proxy::PIXEL_SMALL, $timestamp); $fields['thumb'] = self::storeAvatarCache($image, $filename, Proxy::PIXEL_THUMB, $timestamp); diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 4f449a1fa3..122422a820 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -2320,7 +2320,7 @@ class Contact if ($fetchResult->isSuccess() && !empty($img_str)) { $image = new Image($img_str, $fetchResult->getContentType(), $avatar); if ($image->isValid()) { - $update_fields['blurhash'] = $image->getBlurHash(); + $update_fields['blurhash'] = $image->getBlurHash($img_str); } else { return; } diff --git a/src/Model/Photo.php b/src/Model/Photo.php index e2d38241d8..3a37bc50d1 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -434,6 +434,7 @@ class Photo $data = ''; $backend_ref = ''; $storage = ''; + $img_str = $image->asString(); try { if (DBA::isResult($existing_photo)) { @@ -442,9 +443,9 @@ class Photo } else { $storage = DI::storage(); } - $backend_ref = $storage->put($image->asString(), $backend_ref); + $backend_ref = $storage->put($img_str, $backend_ref); } catch (InvalidClassStorageException $storageException) { - $data = $image->asString(); + $data = $img_str; } $fields = [ @@ -452,7 +453,7 @@ class Photo 'contact-id' => $cid, 'guid' => $guid, 'resource-id' => $rid, - 'hash' => md5($image->asString()), + 'hash' => md5($img_str), 'created' => $created, 'edited' => DateTimeFormat::utcNow(), 'filename' => basename($filename), @@ -460,8 +461,8 @@ class Photo 'album' => $album, 'height' => $image->getHeight(), 'width' => $image->getWidth(), - 'datasize' => strlen($image->asString()), - 'blurhash' => $image->getBlurHash(), + 'datasize' => strlen($img_str), + 'blurhash' => $image->getBlurHash($img_str), 'data' => $data, 'scale' => $scale, 'photo-type' => $type, diff --git a/src/Model/Post/Link.php b/src/Model/Post/Link.php index 021e8a84b7..93a53c8545 100644 --- a/src/Model/Post/Link.php +++ b/src/Model/Post/Link.php @@ -130,12 +130,12 @@ class Link if (Images::isSupportedMimeType($fields['mimetype'])) { $img_str = $curlResult->getBodyString(); - $image = new Image($img_str, $fields['mimetype'], $url); + $image = new Image($img_str, $fields['mimetype'], $url, false); if ($image->isValid()) { $fields['mimetype'] = $image->getType(); $fields['width'] = $image->getWidth(); $fields['height'] = $image->getHeight(); - $fields['blurhash'] = $image->getBlurHash(); + $fields['blurhash'] = $image->getBlurHash($img_str); } } diff --git a/src/Object/Image.php b/src/Object/Image.php index 26fc5bac6f..08ebe4f458 100644 --- a/src/Object/Image.php +++ b/src/Object/Image.php @@ -105,7 +105,8 @@ class Image * @param string $data * @return boolean */ - private function isAnimatedWebP(string $data) { + private function isAnimatedWebP(string $data) + { $header_format = 'A4Riff/I1Filesize/A4Webp/A4Vp/A74Chunk'; $header = @unpack($header_format, $data); @@ -356,7 +357,6 @@ class Image } else { return false; } - } /** @@ -526,7 +526,7 @@ class Image $width = $this->getWidth(); $height = $this->getHeight(); - if ((!$width)|| (!$height)) { + if ((!$width) || (!$height)) { return false; } @@ -733,7 +733,7 @@ class Image } } - $stream = fopen('php://memory','r+'); + $stream = fopen('php://memory', 'r+'); switch ($this->getImageType()) { case IMAGETYPE_PNG: @@ -768,9 +768,9 @@ class Image * @param string $img_str * @return string */ - public function getBlurHash(): string + public function getBlurHash(string $img_str = ''): string { - $image = clone($this); + $image = new Image($img_str ?: $this->asString(), $this->getType(), $this->filename, false); if (empty($image) || !$this->isValid()) { return ''; } diff --git a/src/Util/Images.php b/src/Util/Images.php index 675f034b9c..75d5d4d19e 100644 --- a/src/Util/Images.php +++ b/src/Util/Images.php @@ -366,11 +366,11 @@ class Images return []; } - $image = new Image($img_str, '', $url); + $image = new Image($img_str, '', $url, false); if ($image->isValid()) { - $data['blurhash'] = $image->getBlurHash(); - + $data['blurhash'] = $image->getBlurHash($img_str); + if ($ocr) { $media = ['img_str' => $img_str]; Hook::callAll('ocr-detection', $media); @@ -454,7 +454,7 @@ class Images { return self::getBBCodeByUrl( DI::baseUrl() . '/photos/' . $nickname . '/image/' . $resource_id, - DI::baseUrl() . '/photo/' . $resource_id . '-' . $preview. $ext, + DI::baseUrl() . '/photo/' . $resource_id . '-' . $preview . $ext, $description ); }