filefill icon indicating copy to clipboard operation
filefill copied to clipboard

Placeholder for large images

Open lochmueller opened this issue 2 years ago • 3 comments

Hey everyone,

currently, the placeholder service just stores the result of the URI in the target file without checking for errors. If there are errors/problems in the placeholder service the result is JSON and there is an error message. I got this error, because I use filefill for large images and the images are to large for https://via.placeholder.com/ as result, there is a "jpg" file in the filesystem with a JSON error in it. Bad for further processing like EXT:webp and regular content elements.

As result I add this code after this line https://github.com/IchHabRecht/filefill/blob/main/Classes/Resource/Handler/PlaceholderResource.php#L82 to reduce the file size, if the file size is the problem. I don't check the max file dimension or different errors of the service. This code just handle my usecase.

            if ($response->getHeaderLine('Content-Type') === 'application/json') {
                $result = \json_decode($content);
                if (isset($result->error) && $result->error === 'Requested image size is too large') {

                    $fileData = $fileObject->getProperties();
                    $fileData['identifier'] = $fileObject->getIdentifier();
                    $fileData['name'] = $fileObject->getName();

                    // half size
                    $fileData['width'] = floor($fileData['width'] / 2);
                    $fileData['height'] = floor($fileData['height'] / 2);

                    $fileObjectResized = new File($fileData, $fileObject->getStorage());

                    return $this->getFile($fileData['identifier'], $filePath, $fileObjectResized);
                }
            }

Perhaps PlaceholderResource.php should handle this more generall (at least throw an Exception if the result is json, so the getFile method return false).

Regards, Tim

lochmueller avatar Jun 13 '23 10:06 lochmueller

Hi @lochmueller,

Are you talking about the file size or the file dimensions? Can you give me some example that will return an error?

IchHabRecht avatar Jun 13 '23 10:06 IchHabRecht

Hey @IchHabRecht sorry... please replace all "size" with "dimension" :-) Here is an example: https://via.placeholder.com/3840x2160.jpg Regards, Tim

lochmueller avatar Jun 13 '23 10:06 lochmueller

Hi @lochmueller

Thanks for your feedback. I will work on this issue as soon as I find some spare time.

IchHabRecht avatar Jun 13 '23 10:06 IchHabRecht