@@ -2,6 +2,9 @@ import algorithm, os, osproc, strformat, strutils
22import pixie/ common, pixie/ fileformats/ gif, pixie/ fileformats/ jpeg,
33 pixie/ fileformats/ png, pixie/ fileformats/ tiff
44
5+ when defined (writeImages):
6+ import write_images
7+
58const imageTestSuitePath = " ../imagetestsuite"
69
710type
@@ -385,34 +388,50 @@ proc checkDimensions(
385388 stats.failures.add (& " { path} : decoded { width} x{ height} , dimensions " &
386389 & " { dimensions.width} x{ dimensions.height} " )
387390
391+ template writeImageTestSuiteImage (kind, path: string , image: untyped ) =
392+ when defined (writeImages):
393+ let dirName =
394+ case kind
395+ of " jpg" :
396+ " jpeg"
397+ of " tif" :
398+ " tiff"
399+ else :
400+ kind
401+ image.writeOutputImage (imageTestSuiteOutputDir / dirName, path)
402+
388403proc checkGif (stats: var TestStats , path: string ) =
389404 let data = readFile (path)
390405 let
391406 gif = decodeGif (data)
392407 image = newImage (gif)
393408 dimensions = decodeGifDimensions (data)
394409 stats.checkDimensions (path, image.width, image.height, dimensions)
410+ writeImageTestSuiteImage (" gif" , path, image)
395411
396412proc checkJpeg (stats: var TestStats , path: string ) =
397413 let data = readFile (path)
398414 let
399415 image = decodeJpeg (data)
400416 dimensions = decodeJpegDimensions (data)
401417 stats.checkDimensions (path, image.width, image.height, dimensions)
418+ writeImageTestSuiteImage (" jpg" , path, image)
402419
403420proc checkPng (stats: var TestStats , path: string ) =
404421 let data = readFile (path)
405422 let
406423 dimensions = decodePngDimensions (data)
407424 image = decodePng (data).convertToImage ()
408425 stats.checkDimensions (path, image.width, image.height, dimensions)
426+ writeImageTestSuiteImage (" png" , path, image)
409427
410428proc checkTiff (stats: var TestStats , path: string ) =
411429 let data = readFile (path)
412430 let
413431 dimensions = decodeTiffDimensions (data)
414432 image = decodeTiff (data).convertToImage ()
415433 stats.checkDimensions (path, image.width, image.height, dimensions)
434+ writeImageTestSuiteImage (" tif" , path, image)
416435
417436proc checkOne (kind, path: string ) =
418437 var stats: TestStats
@@ -533,6 +552,10 @@ if paramCount() == 2:
533552if not dirExists (imageTestSuitePath):
534553 echo & " Skipping imagetestsuite: { imageTestSuitePath} was not found "
535554else :
555+ when defined (writeImages):
556+ resetOutputDir (imageTestSuiteOutputDir)
557+ echo & " Writing decoded ImageTestSuite images to { imageTestSuiteOutputDir} "
558+
536559 var stats: TestStats
537560 stats.checkFiles (" gif" , " *.gif" , " GIF" , " gif" )
538561 stats.checkFiles (" jpg" , " *.jpg" , " JPG" , " jpg" )
0 commit comments