Merge pull request #133 from muellermartin/fix-png-alpha
Remove alpha layer from PNG files for img2pdf
This commit is contained in:
		
						commit
						dbdd9b93f8
					
				@ -66,6 +66,10 @@ class RasterisedDocumentParser(DocumentParser):
 | 
			
		||||
            "image/gif",
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
    def has_alpha(self, image):
 | 
			
		||||
        with Image.open(image) as im:
 | 
			
		||||
            return im.mode in ('RGBA', 'LA')
 | 
			
		||||
 | 
			
		||||
    def get_dpi(self, image):
 | 
			
		||||
        try:
 | 
			
		||||
            with Image.open(image) as im:
 | 
			
		||||
@ -182,6 +186,19 @@ class RasterisedDocumentParser(DocumentParser):
 | 
			
		||||
        if self.is_image(mime_type):
 | 
			
		||||
            dpi = self.get_dpi(input_file)
 | 
			
		||||
            a4_dpi = self.calculate_a4_dpi(input_file)
 | 
			
		||||
 | 
			
		||||
            if self.has_alpha(input_file):
 | 
			
		||||
                self.log(
 | 
			
		||||
                    "info",
 | 
			
		||||
                    f"Removing alpha layer from {input_file} "
 | 
			
		||||
                    "for compatibility with img2pdf"
 | 
			
		||||
                )
 | 
			
		||||
                with Image.open(input_file) as im:
 | 
			
		||||
                    background = Image.new('RGBA', im.size, (255, 255, 255))
 | 
			
		||||
                    background.alpha_composite(im)
 | 
			
		||||
                    background = background.convert('RGB')
 | 
			
		||||
                    background.save(input_file, format=im.format)
 | 
			
		||||
 | 
			
		||||
            if dpi:
 | 
			
		||||
                self.log(
 | 
			
		||||
                    "debug",
 | 
			
		||||
 | 
			
		||||
@ -181,13 +181,14 @@ class TestParser(DirectoriesMixin, TestCase):
 | 
			
		||||
 | 
			
		||||
        self.assertContainsStrings(parser.get_text(), ["This is a test document."])
 | 
			
		||||
 | 
			
		||||
    def test_image_simple_alpha_fail(self):
 | 
			
		||||
    def test_image_simple_alpha(self):
 | 
			
		||||
        parser = RasterisedDocumentParser(None)
 | 
			
		||||
 | 
			
		||||
        def f():
 | 
			
		||||
        parser.parse(os.path.join(self.SAMPLE_FILES, "simple-alpha.png"), "image/png")
 | 
			
		||||
 | 
			
		||||
        self.assertRaises(ParseError, f)
 | 
			
		||||
        self.assertTrue(os.path.isfile(parser.archive_path))
 | 
			
		||||
 | 
			
		||||
        self.assertContainsStrings(parser.get_text(), ["This is a test document."])
 | 
			
		||||
 | 
			
		||||
    def test_image_calc_a4_dpi(self):
 | 
			
		||||
        parser = RasterisedDocumentParser(None)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user