Hi, thanks for this package.
I found CBR/CBZ cover extraction edge cases in kiwilan/php-ebook v3.0.09.
Environment
- PHP
8.1.34
kiwilan/php-ebook 3.0.09
- macOS arm64
What works
- CBR/CBZ with first image named
cover.jpg => getCover() is returned.
What doesn’t work
- CBR/CBZ with first image named
cover.png => getCover() is null.
- CBR/CBZ with first image named
COVER.JPG (uppercase extension) => getCover() is null.
Repro
<?php
require 'vendor/autoload.php';
use Kiwilan\Ebook\Ebook;
// tiny 1x1 PNG and JPEG payloads
$png = base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO7+L8wAAAAASUVORK5CYII=');
$jpg = base64_decode('/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABALDg8QEBAPEA8QFRAQFhUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRX/2wBDARESEhUVFRYVFRYVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRX/wAARCAAQABADASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAfEAACAQQDAQAAAAAAAAAAAAABAgMABAURBhIhMUH/xAAVAQEBAAAAAAAAAAAAAAAAAAADBP/EABkRAAMAAwAAAAAAAAAAAAAAAAABAhEhQf/aAAwDAQACEQMRAD8AkQw3U1fTn2Y7QplkURxA6mMZ6Zr0NhkW0NQj8w5m0a1kqJYg5mVjA6n8K2jLJtq8+7WqNwMZ8j7wT3oX7mJf/Z');
file_put_contents('cover.png', $png);
file_put_contents('COVER.JPG', $jpg);
// create archives (example shell)
// zip -q sample-png.cbz cover.png
// rar a -idq sample-png.cbr cover.png
// zip -q sample-upper.cbz COVER.JPG
// rar a -idq sample-upper.cbr COVER.JPG
foreach (['sample-png.cbz','sample-png.cbr','sample-upper.cbz','sample-upper.cbr'] as $file) {
$ebook = Ebook::read(__DIR__ . '/' . $file);
echo $file . ' cover=' . ($ebook?->getCover() ? 'yes' : 'no') . PHP_EOL;
}
Expected
getCover() should detect covers from common image types and case variants in comic archives, including:
.png
- uppercase extensions like
.JPG, .JPEG, .WEBP, .PNG
Actual
Only lowercase .jpg / .jpeg / .webp are effectively picked for CBR/CBZ cover detection, so valid archives can return no cover.
Hi, thanks for this package.
I found CBR/CBZ cover extraction edge cases in
kiwilan/php-ebookv3.0.09.Environment
8.1.34kiwilan/php-ebook3.0.09What works
cover.jpg=>getCover()is returned.What doesn’t work
cover.png=>getCover()isnull.COVER.JPG(uppercase extension) =>getCover()isnull.Repro
Expected
getCover()should detect covers from common image types and case variants in comic archives, including:.png.JPG,.JPEG,.WEBP,.PNGActual
Only lowercase
.jpg/.jpeg/.webpare effectively picked for CBR/CBZ cover detection, so valid archives can return no cover.