Keep JPEGs in the YCbCr colorspace instead of going between YCbCr and RGB
authorSteinar H. Gunderson <sesse@debian.org>
Fri, 25 Jan 2008 18:47:23 +0000 (19:47 +0100)
committerSteinar H. Gunderson <sesse@debian.org>
Fri, 25 Jan 2008 18:47:23 +0000 (19:47 +0100)
just to scale it. Seems to improve overall performance about 10% for
400x600 (800x600 portrait :-) ) images, from 1.1 to 1.0 seconds.

perl/Sesse/pr0n/Common.pm

index e339fd3ab596026f33390cdefa97579ecce2a249..000b3511464291baa52f76c35195bdd6b58da21b 100644 (file)
@@ -401,6 +401,11 @@ sub ensure_cached {
                        $err = $magick->Read(file => \*DCRAW);
                        close(DCRAW);
                } else {
+                       # We always want YCbCr JPEGs. Setting this explicitly here instead of using
+                       # RGB is slightly faster (no colorspace conversion needed) and works equally
+                       # well for our uses. (Ideally we'd be able to keep the image subsampled and
+                       # planar, but that would probably be difficult for ImageMagick to expose.)
+                       $magick->Set(colorspace=>'YCbCr');
                        $err = $magick->Read($fname);
                }
                
@@ -425,11 +430,6 @@ sub ensure_cached {
                        update_image_info($r, $id, $width, $height);
                }
                        
-               # We always want RGB JPEGs
-               if ($img->Get('Colorspace') eq "CMYK") {
-                       $img->Set(colorspace=>'RGB');
-               }
-
                while (defined($xres) && defined($yres)) {
                        my ($nxres, $nyres) = (shift @otherres, shift @otherres);
                        my $cachename = get_cache_location($r, $id, $xres, $yres, $infobox);