288 lines
No EOL
8.2 KiB
Scheme
288 lines
No EOL
8.2 KiB
Scheme
; Test gimp-<image format>-export PDB procedures
|
|
|
|
; Tests image export methods of the PDB
|
|
|
|
(script-fu-use-v3)
|
|
|
|
|
|
|
|
|
|
|
|
; setup
|
|
|
|
(define testImage (testing:load-test-image-basic-v3))
|
|
(assert `(gimp-image-id-is-valid ,testImage))
|
|
|
|
|
|
|
|
; random value generators
|
|
|
|
(define dct-method-strings '("integer" "fixed" "float"))
|
|
(define subsampling-method-strings
|
|
'("sub-sampling-1x1" "sub-sampling-2x1" "sub-sampling-1x2" "sub-sampling-2x2"))
|
|
(define png-format-strings
|
|
'("auto" "rgb8" "gray8" "rgba8" "graya8" "rgb16" "gray16" "rgba16" "graya16"))
|
|
(define bmp-format-strings
|
|
'( "rgb-565" "rgba-5551" "rgb-555" "rgb-888" "rgba-8888" "rgbx-8888"))
|
|
(define webp-encoder-strings
|
|
'("default" "picture" "photo" "drawing" "icon" "text"))
|
|
; omitting two compresison strings not compatible with all imgage types
|
|
; "ccittfax3" "ccittfax4" only for B/W images?
|
|
(define tiff-compression-strings
|
|
'("none" "lzw" "packbits" "adobe_deflate" "jpeg" ))
|
|
|
|
(define raw-planarity-strings
|
|
'("contiguous" "planar" ))
|
|
(define raw-palette-type-strings
|
|
'("rgb" "bgr" ))
|
|
|
|
(define (random-dct-method)
|
|
; (random 3) is [1 2 3], list index is [0 1 2]
|
|
(list-ref dct-method-strings (- (random 3) 1)))
|
|
|
|
(define (random-subsampling-method)
|
|
; (random 3) is [1 2 3 4], list index is [0 1 2 3]
|
|
(list-ref subsampling-method-strings (- (random 4) 1)))
|
|
|
|
(define (random-png-format)
|
|
(list-ref png-format-strings (- (random 9) 1)))
|
|
|
|
(define (random-bmp-format)
|
|
(list-ref bmp-format-strings (- (random 6) 1)))
|
|
|
|
(define (random-webp-encoder)
|
|
(list-ref webp-encoder-strings (- (random 6) 1)))
|
|
|
|
(define (random-tiff-compression)
|
|
(list-ref tiff-compression-strings (- (random 5) 1)))
|
|
|
|
(define (random-raw-planarity)
|
|
(list-ref raw-planarity-strings (- (random 2) 1)))
|
|
|
|
(define (random-raw-palette-type)
|
|
(list-ref raw-planarity-strings (- (random 2) 1)))
|
|
|
|
; returns 0 or 1
|
|
(define (random-bool)
|
|
; (random 2) returns 1 or 2
|
|
; (random 1) does not ever return 0?
|
|
(- (random 2) 1))
|
|
|
|
|
|
|
|
|
|
; exporter functions, randomized
|
|
|
|
; Call file-jpg-export with randomized args
|
|
(define (randomize-jpg-export sourceImage tempTestFile)
|
|
(file-jpeg-export
|
|
RUN-NONINTERACTIVE
|
|
sourceImage
|
|
tempTestFile ; file destination
|
|
-1 ; NULL for export options
|
|
(random 1.0) ; quality
|
|
(random 1.0) ; smoothing
|
|
(random-bool) ; optimize
|
|
(random-bool) ; progressive
|
|
(random-bool) ; cmyk softproofing
|
|
(random-subsampling-method) ;
|
|
(random-bool) ; baseline
|
|
(random 64) ; restart markers
|
|
(random-dct-method) ; e.g. "integer"
|
|
(random-bool) ; include-exif
|
|
))
|
|
|
|
(define (randomize-png-export sourceImage tempTestFile)
|
|
(file-png-export
|
|
RUN-NONINTERACTIVE
|
|
sourceImage
|
|
tempTestFile ; file destination
|
|
-1 ; NULL for export options
|
|
(random-bool) ; interlaced
|
|
(random 9) ; compression
|
|
(random-bool) ; write metadata bKGD
|
|
(random-bool) ; write metadata oFFs
|
|
(random-bool) ; write metadata pHYs
|
|
(random-bool) ; write metadata tIMe
|
|
(random-bool) ; save transparent
|
|
(random-bool) ; optimize palette
|
|
(random-png-format)
|
|
(random-bool) ; include exif
|
|
; rest default
|
|
))
|
|
|
|
(define (randomize-bmp-export sourceImage tempTestFile)
|
|
(file-bmp-export
|
|
RUN-NONINTERACTIVE
|
|
sourceImage
|
|
tempTestFile ; file destination
|
|
-1 ; NULL for export options
|
|
(random-bool) ; rle compression
|
|
(random-bool) ; write colorspace
|
|
(random-bmp-format)
|
|
))
|
|
|
|
(define (randomize-webp-export sourceImage tempTestFile)
|
|
(file-webp-export
|
|
RUN-NONINTERACTIVE
|
|
sourceImage
|
|
tempTestFile ; file destination
|
|
-1 ; NULL for export options
|
|
(random-webp-encoder)
|
|
(random-bool) ; lossless
|
|
(random 100) ; quality
|
|
(random 100) ; alpha quality
|
|
(random-bool) ; use-sharp-yuv
|
|
(random-bool) ; loop animation
|
|
(random-bool) ; minimize size
|
|
; rest are defaulted
|
|
))
|
|
|
|
; Not totally randomizeable: certain combinations not permitted.
|
|
(define (randomize-tiff-export sourceImage tempTestFile)
|
|
(file-tiff-export
|
|
RUN-NONINTERACTIVE
|
|
sourceImage
|
|
tempTestFile ; file destination
|
|
-1 ; NULL for export options
|
|
(random-bool) ; BigTiff
|
|
(random-tiff-compression)
|
|
(random-bool) ; keep transparent, pixels not alpha
|
|
; Not randomizing, not compatible with all compression choices.
|
|
#f ; cmyk
|
|
(random-bool) ; include exif
|
|
(random-bool) ; include iptc
|
|
(random-bool) ; include xmp
|
|
(random-bool) ; include color profile
|
|
(random-bool) ; include thumbnail
|
|
(random-bool) ; include comment
|
|
))
|
|
|
|
|
|
; gih is essentially sequence of gbr.
|
|
; we don't yet test gbr separately
|
|
(define (randomize-gih-export sourceImage tempTestFile)
|
|
(file-gih-export
|
|
RUN-NONINTERACTIVE
|
|
sourceImage
|
|
tempTestFile ; file destination
|
|
-1 ; NULL for export options
|
|
(random 10) ; spacing. Actual limit is 1000, but save time.
|
|
"dummy description"
|
|
(random 64) ; cell width. Actual limit is huge.
|
|
; rest default
|
|
))
|
|
|
|
; TODO randomize
|
|
(define (randomize-gif-export sourceImage tempTestFile)
|
|
(file-gif-export
|
|
RUN-NONINTERACTIVE
|
|
sourceImage
|
|
tempTestFile ; file destination
|
|
-1 ; NULL for export options
|
|
; rest default
|
|
))
|
|
|
|
; TODO randomize
|
|
(define (randomize-pdf-export sourceImage tempTestFile)
|
|
(file-pdf-export
|
|
RUN-NONINTERACTIVE
|
|
sourceImage
|
|
tempTestFile ; file destination
|
|
-1 ; NULL for export options
|
|
; rest default
|
|
))
|
|
|
|
(define (randomize-raw-export sourceImage tempTestFile)
|
|
(file-pdf-export
|
|
RUN-NONINTERACTIVE
|
|
sourceImage
|
|
tempTestFile ; file destination
|
|
-1 ; NULL for export options
|
|
(random-raw-planarity)
|
|
(random-raw-palette-type)
|
|
))
|
|
|
|
|
|
|
|
|
|
; Repeatedly call a randomizing exporter function
|
|
(define (iterate-exporter exporter testImage tempTestFile count)
|
|
(while (>= count 0)
|
|
(test! (string-append tempTestFile ": " (number->string count)))
|
|
; ? wrapping in assert does not work
|
|
(exporter testImage tempTestFile)
|
|
|
|
; eat our own dog food
|
|
; exported file is importable.
|
|
(gimp-image-delete (gimp-file-load RUN-NONINTERACTIVE tempTestFile))
|
|
|
|
(set! count (- count 1))))
|
|
|
|
|
|
|
|
(test! "file export jpg")
|
|
|
|
; Testing is not comparing output file to a known good result.
|
|
; Test that exported file can be imported.
|
|
; Only testing that no errors are thrown.
|
|
|
|
|
|
; Iterate, calling first-class function that is an image exporter.
|
|
; This overwrites the created file.
|
|
; Create a temp file name with proper suffix.
|
|
; Not sure that is necessary, but the file loader might examine it.
|
|
|
|
; JPG
|
|
(define tempTestFile (gimp-temp-file "jpg"))
|
|
(iterate-exporter randomize-jpg-export testImage tempTestFile 10)
|
|
|
|
; PNG
|
|
(define tempTestFile (gimp-temp-file "png"))
|
|
(iterate-exporter randomize-png-export testImage tempTestFile 10)
|
|
|
|
; BMP
|
|
(define tempTestFile (gimp-temp-file "bmp"))
|
|
(iterate-exporter randomize-bmp-export testImage tempTestFile 10)
|
|
|
|
; WEBP
|
|
(define tempTestFile (gimp-temp-file "webp"))
|
|
(iterate-exporter randomize-webp-export testImage tempTestFile 10)
|
|
|
|
; TIFF
|
|
; Passes, but warns to GIMP Error Console
|
|
(define tempTestFile (gimp-temp-file "tiff"))
|
|
(iterate-exporter randomize-tiff-export testImage tempTestFile 10)
|
|
|
|
; GIH brush pipe
|
|
(define tempTestFile (gimp-temp-file "gih"))
|
|
(iterate-exporter randomize-gih-export testImage tempTestFile 10)
|
|
|
|
; TODO until randomized, only call once
|
|
; GIF
|
|
(define tempTestFile (gimp-temp-file "gif"))
|
|
(iterate-exporter randomize-gif-export testImage tempTestFile 1)
|
|
|
|
; PDF
|
|
(define tempTestFile (gimp-temp-file "pdf"))
|
|
(iterate-exporter randomize-pdf-export testImage tempTestFile 1)
|
|
|
|
; RAW
|
|
; requires a separate loader app installed: RawTherapee or darktable
|
|
;(define tempTestFile (gimp-temp-file "raw"))
|
|
;(iterate-exporter randomize-raw-export testImage tempTestFile 10)
|
|
|
|
; XCF has no options yet, and is tested elsewhere
|
|
|
|
; TODO: GBR etc.
|
|
|
|
; Only the last created file still exists (of each image format.)
|
|
; We were overwriting it.
|
|
|
|
|
|
; cleanup
|
|
; Delete image but not the created file.
|
|
(gimp-image-delete testImage)
|
|
|
|
|
|
(script-fu-use-v2) |