mirror of
				https://github.com/stevenrobertson/cuburn.git
				synced 2025-11-04 02:10:45 -05:00 
			
		
		
		
	Make tiffs 16-bit using tifffile
This commit is contained in:
		@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					import io
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import tempfile
 | 
					import tempfile
 | 
				
			||||||
from cStringIO import StringIO
 | 
					from cStringIO import StringIO
 | 
				
			||||||
@ -10,11 +11,6 @@ import pycuda.driver as cuda
 | 
				
			|||||||
from code.util import ClsMod, launch
 | 
					from code.util import ClsMod, launch
 | 
				
			||||||
from code.output import pixfmtlib
 | 
					from code.output import pixfmtlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import scipy.misc
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if not hasattr(scipy.misc, 'toimage'):
 | 
					 | 
				
			||||||
    raise ImportError("Could not find scipy.misc.toimage. "
 | 
					 | 
				
			||||||
                      "Are scipy and PIL installed?")
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
try:
 | 
					try:
 | 
				
			||||||
    import gevent
 | 
					    import gevent
 | 
				
			||||||
@ -81,6 +77,11 @@ class PILOutput(Output, ClsMod):
 | 
				
			|||||||
    lib = pixfmtlib
 | 
					    lib = pixfmtlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, codec='jpeg', quality=100, alpha=False):
 | 
					    def __init__(self, codec='jpeg', quality=100, alpha=False):
 | 
				
			||||||
 | 
					        import scipy.misc
 | 
				
			||||||
 | 
					        if not hasattr(scipy.misc, 'toimage'):
 | 
				
			||||||
 | 
					            raise ImportError("Could not find scipy.misc.toimage. "
 | 
				
			||||||
 | 
					                              "Are scipy and PIL installed?")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        super(PILOutput, self).__init__()
 | 
					        super(PILOutput, self).__init__()
 | 
				
			||||||
        self.type, self.quality, self.alpha = codec, quality, alpha
 | 
					        self.type, self.quality, self.alpha = codec, quality, alpha
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -94,6 +95,7 @@ class PILOutput(Output, ClsMod):
 | 
				
			|||||||
        return h_out
 | 
					        return h_out
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _convert_buf(self, buf):
 | 
					    def _convert_buf(self, buf):
 | 
				
			||||||
 | 
					        import scipy.misc
 | 
				
			||||||
        out = StringIO()
 | 
					        out = StringIO()
 | 
				
			||||||
        img = scipy.misc.toimage(buf, cmin=0, cmax=1)
 | 
					        img = scipy.misc.toimage(buf, cmin=0, cmax=1)
 | 
				
			||||||
        img.save(out, self.type, quality=self.quality)
 | 
					        img.save(out, self.type, quality=self.quality)
 | 
				
			||||||
@ -117,6 +119,41 @@ class PILOutput(Output, ClsMod):
 | 
				
			|||||||
            return '.jpg'
 | 
					            return '.jpg'
 | 
				
			||||||
        return '.'+self.type
 | 
					        return '.'+self.type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TiffOutput(Output, ClsMod):
 | 
				
			||||||
 | 
					    lib = pixfmtlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, alpha=False):
 | 
				
			||||||
 | 
					        import tifffile
 | 
				
			||||||
 | 
					        if 'filename' in tifffile.TiffWriter.__init__.__func__.func_doc:
 | 
				
			||||||
 | 
					            raise EnvironmentError('tifffile version too old!')
 | 
				
			||||||
 | 
					        super(TiffOutput, self).__init__()
 | 
				
			||||||
 | 
					        self.alpha = alpha
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def convert(self, fb, gnm, dim, stream=None):
 | 
				
			||||||
 | 
					        launchC('f32_to_rgba_u16', self.mod, stream, dim, fb,
 | 
				
			||||||
 | 
					                fb.d_rb, fb.d_seeds)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def copy(self, fb, dim, pool, stream=None):
 | 
				
			||||||
 | 
					        h_out = pool.allocate((dim.h, dim.w, 4), 'u2')
 | 
				
			||||||
 | 
					        cuda.memcpy_dtoh_async(h_out, fb.d_back, stream)
 | 
				
			||||||
 | 
					        return h_out
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def encode(self, buf):
 | 
				
			||||||
 | 
					        import tifffile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if buf is None: return {}, []
 | 
				
			||||||
 | 
					        if not self.alpha:
 | 
				
			||||||
 | 
					            buf = buf[:,:,:3]
 | 
				
			||||||
 | 
					        out = io.BytesIO()
 | 
				
			||||||
 | 
					        tifffile.imsave(out, buf)
 | 
				
			||||||
 | 
					        out.seek(0)
 | 
				
			||||||
 | 
					        return {'.tiff': out}, []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def suffix(self):
 | 
				
			||||||
 | 
					        return '.tiff'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ProResOutput(Output, ClsMod):
 | 
					class ProResOutput(Output, ClsMod):
 | 
				
			||||||
    lib = pixfmtlib
 | 
					    lib = pixfmtlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -406,8 +443,10 @@ class VPxOutput(Output, ClsMod):
 | 
				
			|||||||
def get_output_for_profile(gprof):
 | 
					def get_output_for_profile(gprof):
 | 
				
			||||||
    opts = dict(gprof.output._val)
 | 
					    opts = dict(gprof.output._val)
 | 
				
			||||||
    handler = opts.pop('type', 'jpeg')
 | 
					    handler = opts.pop('type', 'jpeg')
 | 
				
			||||||
    if handler in ('jpeg', 'png', 'tiff'):
 | 
					    if handler in ('jpeg', 'png'):
 | 
				
			||||||
        return PILOutput(codec=handler, **opts)
 | 
					        return PILOutput(codec=handler, **opts)
 | 
				
			||||||
 | 
					    elif handler == 'tiff':
 | 
				
			||||||
 | 
					        return TiffOutput(**opts)
 | 
				
			||||||
    elif handler == 'x264':
 | 
					    elif handler == 'x264':
 | 
				
			||||||
        return X264Output(**opts)
 | 
					        return X264Output(**opts)
 | 
				
			||||||
    elif handler == 'vp8':
 | 
					    elif handler == 'vp8':
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user