feat: add backgound to previews

Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
2026-09-14 18:50:26 -04:00
parent 9a767339fe
commit 1bf71898db
2 changed files with 27 additions and 1 deletions
+13
View File
@@ -76,6 +76,19 @@ final class Provider implements PreviewProviderInterface
} }
$image->setResolution(96, 96); $image->setResolution(96, 96);
$image->readImage('pdf:' . stream_get_meta_data($file)['uri'] . '[0]'); $image->readImage('pdf:' . stream_get_meta_data($file)['uri'] . '[0]');
// Treat transparent PDF areas as paper in every output format.
$image->setImageBackgroundColor('white');
$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
// Scale the inset outline so it remains about one pixel after resizing.
$stroke = max($image->getImageWidth() / $request->maxWidth, $image->getImageHeight() / $request->maxHeight, 1);
$outline = new \ImagickDraw();
$outline->setFillColor('transparent');
$outline->setStrokeColor('#b8b8b8');
$outline->setStrokeWidth($stroke);
$outline->rectangle($stroke / 2, $stroke / 2,
$image->getImageWidth() - $stroke / 2, $image->getImageHeight() - $stroke / 2);
$image->drawImage($outline);
$outline->clear();
$image->setImageFormat('png'); $image->setImageFormat('png');
$png = $image->getImageBlob(); $png = $image->getImageBlob();
return $this->images->generate(new PreviewSource( return $this->images->generate(new PreviewSource(
+14 -1
View File
@@ -68,7 +68,12 @@ final class PreviewTest extends TestCase
$pdf = new Imagick(); $pdf = new Imagick();
foreach ([[400, 200, 'red'], [200, 400, 'blue']] as [$width, $height, $color]) { foreach ([[400, 200, 'red'], [200, 400, 'blue']] as [$width, $height, $color]) {
$page = new Imagick(); $page = new Imagick();
$page->newImage($width, $height, $color, 'pdf'); $page->newImage($width, $height, 'transparent', 'pdf');
$drawing = new ImagickDraw();
$drawing->setFillColor($color);
$drawing->rectangle($width * 0.15, $height * 0.2, $width * 0.75, $height * 0.8);
$page->drawImage($drawing);
$drawing->clear();
$pdf->addImage($page); $pdf->addImage($page);
$page->clear(); $page->clear();
} }
@@ -89,6 +94,14 @@ final class PreviewTest extends TestCase
$color = $image->getImagePixelColor(20, 20)->getColor(); $color = $image->getImagePixelColor(20, 20)->getColor();
self::assertGreaterThan(200, $color['r']); self::assertGreaterThan(200, $color['r']);
self::assertLessThan(30, $color['b']); self::assertLessThan(30, $color['b']);
$paper = $image->getImagePixelColor(5, 5)->getColor();
self::assertGreaterThan(245, $paper['r']);
self::assertGreaterThan(245, $paper['g']);
self::assertGreaterThan(245, $paper['b']);
self::assertSame(1.0, $image->getImagePixelColor(5, 5)->getColorValue(Imagick::COLOR_ALPHA));
$edge = $image->getImagePixelColor(0, 25)->getColor();
self::assertLessThan(230, $edge['r']);
self::assertGreaterThan(130, $edge['r']);
$image->clear(); $image->clear();
} }