1
0
Fork 0
gimp/plug-ins/python/tests/test-file-plug-ins/gimpexporttests.py
Daniel Baumann 554424e00a
Adding upstream version 3.0.4.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-23 00:14:50 +02:00

140 lines
6.2 KiB
Python
Executable file

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# GIMP - The GNU Image Manipulation Program
# Copyright (C) 1995 Spencer Kimball and Peter Mattis
#
# gimpexporttests.py
# Copyright (C) 2021-2024 Jacob Boerema
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
"""Module where we add export tests for GIMP's file export plug-ins."""
import sys
import gi
gi.require_version('Gimp', '3.0')
from gi.repository import Gimp
from gi.repository import Gio
from gimptestframework import GimpExportTest
class BmpExportTests(GimpExportTest):
def __init__(self, group_name, log):
super().__init__(group_name, log)
def load_bmp(self, bmp_name):
pdb_proc = Gimp.get_pdb().lookup_procedure(self.file_import)
pdb_config = pdb_proc.create_config()
pdb_config.set_property('run-mode', Gimp.RunMode.NONINTERACTIVE)
pdb_config.set_property('file', Gio.File.new_for_path(bmp_name))
result = pdb_proc.run(pdb_config)
status = result.index(0)
img = result.index(1)
if (status == Gimp.PDBStatusType.SUCCESS and img is not None and img.is_valid()):
return img
else:
self.log.error(f"Loading image {bmp_name} failed!")
return None
def export_bmp(self, img, bmp_exp_name, rle, space, rgb):
drw = img.get_layers()
export_file_path = self.output_path + bmp_exp_name
pdb_proc = Gimp.get_pdb().lookup_procedure(self.file_export)
pdb_config = pdb_proc.create_config()
pdb_config.set_property('run-mode', Gimp.RunMode.NONINTERACTIVE)
pdb_config.set_property('image', img)
pdb_config.set_property('num-drawables', 1)
pdb_config.set_property('drawables', Gimp.ObjectArray.new(Gimp.Drawable, drw, False))
pdb_config.set_property('file', Gio.File.new_for_path(export_file_path))
pdb_config.set_property('use-rle', rle)
pdb_config.set_property('write-color-space', space)
pdb_config.set_property('rgb-format', rgb)
result = pdb_proc.run(pdb_config)
status = result.index(0)
if status == Gimp.PDBStatusType.SUCCESS:
self.log.info(f"Exporting image {export_file_path} succeeded.")
else:
self.log.error(f"Exporting image {export_file_path} failed!")
def bmp_setup(self, image_name, test_description):
self.log.consoleinfo(test_description)
tmp = self.input_path + image_name
img = self.load_bmp(tmp)
return img
def bmp_teardown(self, image):
if image is not None:
image.delete()
def bmp_1bpp_indexed(self, image_name, test_description):
img = self.bmp_setup(image_name, test_description)
if img is not None:
self.export_bmp(img, "1bpp-norle-nospace.bmp", 0, 0, 0)
self.export_bmp(img, "1bpp-norle-withspace.bmp", 0, 1, 0)
# rle with 1-bit is not valid, test to see if it
# is correctly ignored...
self.export_bmp(img, "1bpp-rle-nospace.bmp", 1, 0, 0)
self.export_bmp(img, "1bpp-rle-withspace.bmp", 1, 1, 0)
self.bmp_teardown(img)
def bmp_4bpp_indexed(self, image_name, test_description):
img = self.bmp_setup(image_name, test_description)
if img is not None:
self.export_bmp(img, "4bpp-norle-nospace.bmp", 0, 0, 0)
self.export_bmp(img, "4bpp-norle-withspace.bmp", 0, 1, 0)
self.export_bmp(img, "4bpp-rle-nospace.bmp", 1, 0, 0)
self.export_bmp(img, "4bpp-rle-withspace.bmp", 1, 1, 0)
self.bmp_teardown(img)
def bmp_8bpp_indexed(self, image_name, test_description):
img = self.bmp_setup(image_name, test_description)
if img is not None:
self.export_bmp(img, "8bpp-norle-nospace.bmp", 0, 0, 0)
self.export_bmp(img, "8bpp-norle-withspace.bmp", 0, 1, 0)
self.export_bmp(img, "8bpp-rle-nospace.bmp", 1, 0, 0)
self.export_bmp(img, "8bpp-rle-withspace.bmp", 1, 1, 0)
self.bmp_teardown(img)
def bmp_rgba(self, image_name, test_description):
img = self.bmp_setup(image_name, test_description)
if img is not None:
# first test correctly ignoring rle
self.export_bmp(img, "rgb-with-rle-nospace.bmp", 1, 0, 3)
# All rgb modes without color space
self.export_bmp(img, "rgb-nrle-nospace-type0.bmp", 0, 0, 0)
self.export_bmp(img, "rgb-nrle-nospace-type1.bmp", 0, 0, 1)
self.export_bmp(img, "rgb-nrle-nospace-type2.bmp", 0, 0, 2)
self.export_bmp(img, "rgb-nrle-nospace-type3.bmp", 0, 0, 3)
self.export_bmp(img, "rgb-nrle-nospace-type4.bmp", 0, 0, 4)
self.export_bmp(img, "rgb-nrle-nospace-type5.bmp", 0, 0, 5)
# All rgb modes with color space
self.export_bmp(img, "rgb-nrle-withspace-type0.bmp", 0, 1, 0)
self.export_bmp(img, "rgb-nrle-withspace-type1.bmp", 0, 1, 1)
self.export_bmp(img, "rgb-nrle-withspace-type2.bmp", 0, 1, 2)
self.export_bmp(img, "rgb-nrle-withspace-type3.bmp", 0, 1, 3)
self.export_bmp(img, "rgb-nrle-withspace-type4.bmp", 0, 1, 4)
self.export_bmp(img, "rgb-nrle-withspace-type5.bmp", 0, 1, 5)
self.bmp_teardown(img)
def run_test(self, group_config):
self.bmp_1bpp_indexed('test1-exp1.bmp', " 1. Using 1bpp indexed BMP...")
self.bmp_4bpp_indexed('pal4rle-exp1.bmp', " 2. Using 4bpp indexed BMP...")
self.bmp_8bpp_indexed('pal8v5-exp1.bmp', " 3. Using 8bpp indexed BMP...")
self.bmp_rgba('rgb32-with-alpha-1.bmp', " 4. Using rgb(a) BMP...")