mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-26 05:31:02 +03:00 
			
		
		
		
	Added precinct size option. Also added the jp2klib_version symbol on the _imaging module.
This commit is contained in:
		
							parent
							
								
									5cb73c94e9
								
							
						
					
					
						commit
						9a1b6966b5
					
				|  | @ -196,6 +196,7 @@ def _save(im, fp, filename): | ||||||
|     quality_layers = info.get('quality_layers', None) |     quality_layers = info.get('quality_layers', None) | ||||||
|     num_resolutions = info.get('num_resolutions', 0) |     num_resolutions = info.get('num_resolutions', 0) | ||||||
|     cblk_size = info.get('codeblock_size', None) |     cblk_size = info.get('codeblock_size', None) | ||||||
|  |     precinct_size = info.get('precinct_size', None) | ||||||
|     irreversible = info.get('irreversible', False) |     irreversible = info.get('irreversible', False) | ||||||
|     progression = info.get('progression', 'LRCP') |     progression = info.get('progression', 'LRCP') | ||||||
|     cinema_mode = info.get('cinema_mode', 'no') |     cinema_mode = info.get('cinema_mode', 'no') | ||||||
|  | @ -212,6 +213,7 @@ def _save(im, fp, filename): | ||||||
|         quality_layers, |         quality_layers, | ||||||
|         num_resolutions, |         num_resolutions, | ||||||
|         cblk_size, |         cblk_size, | ||||||
|  |         precinct_size, | ||||||
|         irreversible, |         irreversible, | ||||||
|         progression, |         progression, | ||||||
|         cinema_mode, |         cinema_mode, | ||||||
|  |  | ||||||
|  | @ -3461,6 +3461,13 @@ setup_module(PyObject* m) { | ||||||
|   } |   } | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | #ifdef HAVE_OPENJPEG | ||||||
|  |   { | ||||||
|  |     extern const char *ImagingJpeg2KVersion(void); | ||||||
|  |     PyDict_SetItemString(d, "jp2klib_version", PyUnicode_FromString(ImagingJpeg2KVersion())); | ||||||
|  |   } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| #ifdef HAVE_LIBZ | #ifdef HAVE_LIBZ | ||||||
|   /* zip encoding strategies */ |   /* zip encoding strategies */ | ||||||
|   PyModule_AddIntConstant(m, "DEFAULT_STRATEGY", Z_DEFAULT_STRATEGY); |   PyModule_AddIntConstant(m, "DEFAULT_STRATEGY", Z_DEFAULT_STRATEGY); | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								encode.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								encode.c
									
									
									
									
									
								
							|  | @ -836,7 +836,7 @@ PyImaging_Jpeg2KEncoderNew(PyObject *self, PyObject *args) | ||||||
|     char *quality_mode = "rates"; |     char *quality_mode = "rates"; | ||||||
|     PyObject *quality_layers = NULL; |     PyObject *quality_layers = NULL; | ||||||
|     int num_resolutions = 0; |     int num_resolutions = 0; | ||||||
|     PyObject *cblk_size = NULL; |     PyObject *cblk_size = NULL, *precinct_size = NULL; | ||||||
|     PyObject *irreversible = NULL; |     PyObject *irreversible = NULL; | ||||||
|     char *progression = "LRCP"; |     char *progression = "LRCP"; | ||||||
|     OPJ_PROG_ORDER prog_order; |     OPJ_PROG_ORDER prog_order; | ||||||
|  | @ -844,10 +844,11 @@ PyImaging_Jpeg2KEncoderNew(PyObject *self, PyObject *args) | ||||||
|     OPJ_CINEMA_MODE cine_mode; |     OPJ_CINEMA_MODE cine_mode; | ||||||
|     int fd = -1; |     int fd = -1; | ||||||
| 
 | 
 | ||||||
|     if (!PyArg_ParseTuple(args, "ss|OOOsOIOOssi", &mode, &format, |     if (!PyArg_ParseTuple(args, "ss|OOOsOIOOOssi", &mode, &format, | ||||||
|                           &offset, &tile_offset, &tile_size, |                           &offset, &tile_offset, &tile_size, | ||||||
|                           &quality_mode, &quality_layers, &num_resolutions, |                           &quality_mode, &quality_layers, &num_resolutions, | ||||||
|                           &cblk_size, &irreversible, &progression, &cinema_mode, |                           &cblk_size, &precinct_size, | ||||||
|  |                           &irreversible, &progression, &cinema_mode, | ||||||
|                           &fd)) |                           &fd)) | ||||||
|         return NULL; |         return NULL; | ||||||
| 
 | 
 | ||||||
|  | @ -916,6 +917,9 @@ PyImaging_Jpeg2KEncoderNew(PyObject *self, PyObject *args) | ||||||
|     j2k_decode_coord_tuple(cblk_size, |     j2k_decode_coord_tuple(cblk_size, | ||||||
|                            &context->cblk_width, |                            &context->cblk_width, | ||||||
|                            &context->cblk_height); |                            &context->cblk_height); | ||||||
|  |     j2k_decode_coord_tuple(precinct_size, | ||||||
|  |                            &context->precinct_width, | ||||||
|  |                            &context->precinct_height); | ||||||
| 
 | 
 | ||||||
|     context->irreversible = PyObject_IsTrue(irreversible); |     context->irreversible = PyObject_IsTrue(irreversible); | ||||||
|     context->progression = prog_order; |     context->progression = prog_order; | ||||||
|  |  | ||||||
|  | @ -65,6 +65,9 @@ typedef struct { | ||||||
|     /* Code block size */ |     /* Code block size */ | ||||||
|     int            cblk_width, cblk_height; |     int            cblk_width, cblk_height; | ||||||
| 
 | 
 | ||||||
|  |     /* Precinct size */ | ||||||
|  |     int            precinct_width, precinct_height; | ||||||
|  | 
 | ||||||
|     /* Compression style */ |     /* Compression style */ | ||||||
|     int            irreversible; |     int            irreversible; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -364,6 +364,15 @@ j2k_encode_entry(Imaging im, ImagingCodecState state, | ||||||
|         params.cblockh_init = context->cblk_height; |         params.cblockh_init = context->cblk_height; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     if (context->precinct_width >= 4 && context->precinct_height >= 4 | ||||||
|  |         && context->precinct_width >= context->cblk_width | ||||||
|  |         && context->precinct_height > context->cblk_height) { | ||||||
|  |         params.prcw_init[0] = context->precinct_width; | ||||||
|  |         params.prch_init[0] = context->precinct_height; | ||||||
|  |         params.res_spec = 1; | ||||||
|  |         params.csty |= 0x01; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     params.irreversible = context->irreversible; |     params.irreversible = context->irreversible; | ||||||
| 
 | 
 | ||||||
|     params.prog_order = context->progression; |     params.prog_order = context->progression; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user