mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-31 16:07:30 +03:00 
			
		
		
		
	Pass in fill color to transform.
This commit is contained in:
		
							parent
							
								
									da92156548
								
							
						
					
					
						commit
						dce04b680b
					
				
							
								
								
									
										13
									
								
								PIL/Image.py
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								PIL/Image.py
									
									
									
									
									
								
							|  | @ -2074,7 +2074,7 @@ class Image(object): | |||
| 
 | ||||
|     # FIXME: the different transform methods need further explanation | ||||
|     # instead of bloating the method docs, add a separate chapter. | ||||
|     def transform(self, size, method, data=None, resample=NEAREST, fill=1): | ||||
|     def transform(self, size, method, data=None, resample=NEAREST, fill=None): | ||||
|         """ | ||||
|         Transforms this image.  This method creates a new image with the | ||||
|         given size, and the same mode as the original, and copies data | ||||
|  | @ -2095,9 +2095,11 @@ class Image(object): | |||
|            environment), or :py:attr:`PIL.Image.BICUBIC` (cubic spline | ||||
|            interpolation in a 4x4 environment). If omitted, or if the image | ||||
|            has mode "1" or "P", it is set to :py:attr:`PIL.Image.NEAREST`. | ||||
|         :param fill: Optional fill color for the area outside the transform | ||||
|            in the output image. | ||||
|         :returns: An :py:class:`~PIL.Image.Image` object. | ||||
|         """ | ||||
| 
 | ||||
|          | ||||
|         if self.mode == 'LA': | ||||
|             return self.convert('La').transform( | ||||
|                 size, method, data, resample, fill).convert('LA') | ||||
|  | @ -2107,6 +2109,7 @@ class Image(object): | |||
|                 size, method, data, resample, fill).convert('RGBA') | ||||
| 
 | ||||
|         if isinstance(method, ImageTransformHandler): | ||||
|             fill = 1 | ||||
|             return method.transform(size, self, resample=resample, fill=fill) | ||||
| 
 | ||||
|         if hasattr(method, "getdata"): | ||||
|  | @ -2116,13 +2119,13 @@ class Image(object): | |||
|         if data is None: | ||||
|             raise ValueError("missing method data") | ||||
| 
 | ||||
|         im = new(self.mode, size, None) | ||||
|         im = new(self.mode, size, fill) | ||||
|         if method == MESH: | ||||
|             # list of quads | ||||
|             for box, quad in data: | ||||
|                 im.__transformer(box, self, QUAD, quad, resample, fill) | ||||
|                 im.__transformer(box, self, QUAD, quad, resample, fill is None) | ||||
|         else: | ||||
|             im.__transformer((0, 0)+size, self, method, data, resample, fill) | ||||
|             im.__transformer((0, 0)+size, self, method, data, resample, fill is None) | ||||
| 
 | ||||
|         return im | ||||
| 
 | ||||
|  |  | |||
|  | @ -52,6 +52,17 @@ class TestImageTransform(PillowTestCase): | |||
| 
 | ||||
|         self.assert_image_equal(transformed, scaled) | ||||
| 
 | ||||
|     def test_fill(self): | ||||
|         im = hopper('RGB') | ||||
|         (w, h) = im.size | ||||
|         transformed = im.transform(im.size, Image.EXTENT, | ||||
|                                    (0, 0, | ||||
|                                     w*2, h*2), | ||||
|                                    Image.BILINEAR, | ||||
|                                    fill = 'red') | ||||
| 
 | ||||
|         self.assertEqual(transformed.getpixel((w-1,h-1)), (255,0,0)) | ||||
| 
 | ||||
|     def test_mesh(self): | ||||
|         # this should be a checkerboard of halfsized hoppers in ul, lr | ||||
|         im = hopper('RGBA') | ||||
|  | @ -256,6 +267,16 @@ class TestImageTransformPerspective(TestImageTransformAffine): | |||
|     # Repeat all tests for AFFINE transformations with PERSPECTIVE | ||||
|     transform = Image.PERSPECTIVE | ||||
| 
 | ||||
| 
 | ||||
| class TestFill(unittest.TestCase): | ||||
|     def test_fill(self): | ||||
|         im = hopper('RGB') | ||||
|         (w, h) = im.size | ||||
|         transformed = im.transform(im.size, Image.EXTENT, | ||||
|                                    (0, 0, | ||||
|                                     w*2, h*2), | ||||
|                                    Image.BILINEAR, | ||||
|                                    fill = 'red') | ||||
|         transformed.show() | ||||
|         self.assertEqual(transformed.getpixel((w-1,h-1)), (255,0,0)) | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
|  |  | |||
|  | @ -1612,7 +1612,7 @@ _transform2(ImagingObject* self, PyObject* args) | |||
|     int fill = 1; | ||||
|     if (!PyArg_ParseTuple(args, "(iiii)O!iO|ii", | ||||
|                           &x0, &y0, &x1, &y1, | ||||
|               &Imaging_Type, &imagep, | ||||
|                           &Imaging_Type, &imagep, | ||||
|                           &method, &data, | ||||
|                           &filter, &fill)) | ||||
|     return NULL; | ||||
|  | @ -1637,7 +1637,7 @@ _transform2(ImagingObject* self, PyObject* args) | |||
| 
 | ||||
|     imOut = ImagingTransform( | ||||
|         self->image, imagep->image, method, | ||||
|         x0, y0, x1, y1, a, filter, 1); | ||||
|         x0, y0, x1, y1, a, filter, fill); | ||||
| 
 | ||||
|     free(a); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user