mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-31 16:07:30 +03:00 
			
		
		
		
	
						commit
						243160ee78
					
				
							
								
								
									
										37
									
								
								Tests/large_memory_numpy_test.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								Tests/large_memory_numpy_test.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | ||||||
|  | from tester import * | ||||||
|  | 
 | ||||||
|  | # This test is not run automatically. | ||||||
|  | # | ||||||
|  | # It requires > 2gb memory for the >2 gigapixel image generated in the | ||||||
|  | # second test.  Running this automatically would amount to a denial of | ||||||
|  | # service on our testing infrastructure.  I expect this test to fail | ||||||
|  | # on any 32 bit machine, as well as any smallish things (like | ||||||
|  | # raspberrypis). | ||||||
|  | 
 | ||||||
|  | from PIL import Image | ||||||
|  | try: | ||||||
|  |     import numpy as np | ||||||
|  | except: | ||||||
|  |     skip() | ||||||
|  |      | ||||||
|  | ydim = 32769 | ||||||
|  | xdim = 48000 | ||||||
|  | f = tempfile('temp.png') | ||||||
|  | 
 | ||||||
|  | def _write_png(xdim,ydim): | ||||||
|  |     dtype = np.uint8 | ||||||
|  |     a = np.zeros((xdim, ydim), dtype=dtype) | ||||||
|  |     im = Image.fromarray(a, 'L') | ||||||
|  |     im.save(f) | ||||||
|  |     success() | ||||||
|  | 
 | ||||||
|  | def test_large(): | ||||||
|  |     """ succeeded prepatch""" | ||||||
|  |     _write_png(xdim,ydim) | ||||||
|  | def test_2gpx(): | ||||||
|  |     """failed prepatch""" | ||||||
|  |     _write_png(xdim,xdim) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @ -325,15 +325,15 @@ Imaging | ||||||
| ImagingNewBlock(const char *mode, int xsize, int ysize) | ImagingNewBlock(const char *mode, int xsize, int ysize) | ||||||
| { | { | ||||||
|     Imaging im; |     Imaging im; | ||||||
|     int y, i; |     Py_ssize_t y, i; | ||||||
|     int bytes; |     Py_ssize_t bytes; | ||||||
| 
 | 
 | ||||||
|     im = ImagingNewPrologue(mode, xsize, ysize); |     im = ImagingNewPrologue(mode, xsize, ysize); | ||||||
|     if (!im) |     if (!im) | ||||||
|         return NULL; |         return NULL; | ||||||
| 
 | 
 | ||||||
|     /* Use a single block */ |     /* Use a single block */ | ||||||
|     bytes = im->ysize * im->linesize; |     bytes = (Py_ssize_t) im->ysize * im->linesize; | ||||||
|     if (bytes <= 0) |     if (bytes <= 0) | ||||||
|         /* some platforms return NULL for malloc(0); this fix
 |         /* some platforms return NULL for malloc(0); this fix
 | ||||||
|            prevents MemoryError on zero-sized images on such |            prevents MemoryError on zero-sized images on such | ||||||
|  |  | ||||||
							
								
								
									
										8
									
								
								map.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								map.c
									
									
									
									
									
								
							|  | @ -323,7 +323,7 @@ mapping_destroy_buffer(Imaging im) | ||||||
| PyObject* | PyObject* | ||||||
| PyImaging_MapBuffer(PyObject* self, PyObject* args) | PyImaging_MapBuffer(PyObject* self, PyObject* args) | ||||||
| { | { | ||||||
|     int y, size; |     Py_ssize_t y, size; | ||||||
|     Imaging im; |     Imaging im; | ||||||
| 
 | 
 | ||||||
|     PyObject* target; |     PyObject* target; | ||||||
|  | @ -331,12 +331,12 @@ PyImaging_MapBuffer(PyObject* self, PyObject* args) | ||||||
|     char* mode; |     char* mode; | ||||||
|     char* codec; |     char* codec; | ||||||
|     PyObject* bbox; |     PyObject* bbox; | ||||||
|     int offset; |     Py_ssize_t offset; | ||||||
|     int xsize, ysize; |     int xsize, ysize; | ||||||
|     int stride; |     int stride; | ||||||
|     int ystep; |     int ystep; | ||||||
| 
 | 
 | ||||||
|     if (!PyArg_ParseTuple(args, "O(ii)sOi(sii)", &target, &xsize, &ysize, |     if (!PyArg_ParseTuple(args, "O(ii)sOn(sii)", &target, &xsize, &ysize, | ||||||
|                           &codec, &bbox, &offset, &mode, &stride, &ystep)) |                           &codec, &bbox, &offset, &mode, &stride, &ystep)) | ||||||
|         return NULL; |         return NULL; | ||||||
| 
 | 
 | ||||||
|  | @ -354,7 +354,7 @@ PyImaging_MapBuffer(PyObject* self, PyObject* args) | ||||||
|             stride = xsize * 4; |             stride = xsize * 4; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     size = ysize * stride; |     size = (Py_ssize_t) ysize * stride; | ||||||
| 
 | 
 | ||||||
|     /* check buffer size */ |     /* check buffer size */ | ||||||
|     if (PyImaging_GetBuffer(target, &view) < 0) |     if (PyImaging_GetBuffer(target, &view) < 0) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user