mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-31 16:07:30 +03:00 
			
		
		
		
	There are two main issues fixed with this commit: * bytes vs. str: All file, image, and palette data are now handled as bytes. A new _binary module consolidates the hacks needed to do this across Python versions. tostring/fromstring methods have been renamed to tobytes/frombytes, but the Python 2.6/2.7 versions alias them to the old names for compatibility. Users should move to tobytes/frombytes. One other potentially-breaking change is that text data in image files (such as tags, comments) are now explicitly handled with a specific character encoding in mind. This works well with the Unicode str in Python 3, but may trip up old code expecting a straight byte-for-byte translation to a Python string. This also required a change to Gohlke's tags tests (in Tests/test_file_png.py) to expect Unicode strings from the code. * True div vs. floor div: Many division operations used the "/" operator to do floor division, which is now the "//" operator in Python 3. These were fixed. As of this commit, on the first pass, I have one failing test (improper handling of a slice object in a C module, test_imagepath.py) in Python 3, and three that that I haven't tried running yet (test_imagegl, test_imagegrab, and test_imageqt). I also haven't tested anything on Windows. All but the three skipped tests run flawlessly against Pythons 2.6 and 2.7.
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| 
 | |
| #
 | |
| # Shows how to scan a 16 bit grayscale image into a numarray object
 | |
| #
 | |
| 
 | |
| from __future__ import print_function
 | |
| 
 | |
| # Get the path set up to find PIL modules if not installed yet:
 | |
| import sys ; sys.path.append('../PIL')
 | |
| 
 | |
| from numarray import *
 | |
| import sane
 | |
| import Image
 | |
| 
 | |
| def toImage(arr):
 | |
|     if arr.type().bytes == 1:
 | |
|         # need to swap coordinates btw array and image (with [::-1])
 | |
|         im = Image.frombytes('L', arr.shape[::-1], arr.tostring())
 | |
|     else:
 | |
|         arr_c = arr - arr.min()
 | |
|         arr_c *= (255./arr_c.max())
 | |
|         arr = arr_c.astype(UInt8)
 | |
|         # need to swap coordinates btw array and image (with [::-1])
 | |
|         im = Image.frombytes('L', arr.shape[::-1], arr.tostring())
 | |
|     return im
 | |
| 
 | |
| print('SANE version:', sane.init())
 | |
| print('Available devices=', sane.get_devices())
 | |
| 
 | |
| s = sane.open(sane.get_devices()[0][0])
 | |
| 
 | |
| # Set scan parameters
 | |
| s.mode = 'gray'
 | |
| s.br_x=320. ; s.br_y=240.
 | |
| 
 | |
| print('Device parameters:', s.get_parameters())
 | |
| 
 | |
| s.depth=16
 | |
| arr16 = s.arr_scan()
 | |
| toImage(arr16).show()
 |