Skip to content

Commit cbb641f

Browse files
committed
Add optional decoded image outputs
1 parent c2bfb42 commit cbb641f

3 files changed

Lines changed: 49 additions & 0 deletions

File tree

tests/imagetestsuite.nim

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import algorithm, os, osproc, strformat, strutils
22
import 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+
58
const imageTestSuitePath = "../imagetestsuite"
69

710
type
@@ -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+
388403
proc 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

396412
proc 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

403420
proc 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

410428
proc 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

417436
proc checkOne(kind, path: string) =
418437
var stats: TestStats
@@ -533,6 +552,10 @@ if paramCount() == 2:
533552
if not dirExists(imageTestSuitePath):
534553
echo &"Skipping imagetestsuite: {imageTestSuitePath} was not found"
535554
else:
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")

tests/test_png.nim

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
import pixie, pixie/fileformats/png, pngsuite, strformat
22

3+
when defined(writeImages):
4+
import write_images
5+
6+
when defined(writeImages):
7+
resetOutputDir(pngSuiteOutputDir)
8+
echo &"Writing decoded PNGSuite images to {pngSuiteOutputDir}"
9+
310
for file in pngSuiteFiles:
411
let
512
original = readFile(&"tests/fileformats/png/pngsuite/{file}.png")
613
decoded = decodePng(original)
714
encoded = encodePng(decoded)
15+
when defined(writeImages):
16+
newImage(decoded).writeOutputImage(pngSuiteOutputDir, file)
817

918
block:
1019
let

tests/write_images.nim

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import os
2+
import pixie/fileformats/png, pixie/images
3+
4+
const
5+
imageTestSuiteOutputDir* = "tmp" / "image test suite"
6+
pngSuiteOutputDir* = "tmp" / "png suite"
7+
8+
proc resetOutputDir*(dir: string) =
9+
when defined(writeImages):
10+
if dirExists(dir):
11+
removeDir(dir)
12+
createDir(dir)
13+
14+
proc writeOutputImage*(image: Image, dir, sourcePath: string) =
15+
when defined(writeImages):
16+
createDir(dir)
17+
writeFile(dir / (sourcePath.splitPath.tail & ".png"), image.encodePng())

0 commit comments

Comments
 (0)