Mercurial > repos > iuc > imagej2_convert_format
diff imagej2_utils.py @ 0:312e8ce708b1 draft
planemo upload commit 4bf97847c35c4dcf9638008b9b4b6c4e10015f19
| author | iuc |
|---|---|
| date | Tue, 09 Jun 2015 12:21:40 -0400 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imagej2_utils.py Tue Jun 09 12:21:40 2015 -0400 @@ -0,0 +1,107 @@ +import bioformats +import javabridge +import os +import shutil + +FIJI_JAR_DIR = os.environ.get( 'FIJI_JAR_DIR', None ) +FIJI_OSX_JAVA3D_DIR = os.environ.get( 'FIJI_OSX_JAVA3D_DIR', None ) +FIJI_PLUGIN_DIR = os.environ.get( 'FIJI_PLUGIN_DIR', None ) +FIJI_ROOT_DIR = os.environ.get( 'FIJI_ROOT_DIR', None ) + +def get_java_class_path(): + """ + Return the Java class path for use when starting the JVM via Javabridge. + This function expects the following environment variable settings: + FIJI_JAR_DIR, FIJI_PLUGIN_DIR, FIJI_OSX_JAVA3D_DIR. + """ + class_path_list = [] + # Handle javabridge.JARS setting. + for jar_file in javabridge.JARS: + class_path_list.append( jar_file ) + if FIJI_JAR_DIR is not None and os.path.isdir( FIJI_JAR_DIR ): + for filename in os.listdir( FIJI_JAR_DIR ): + if filename.endswith( '.jar' ): + class_path_list.append( os.path.join( FIJI_JAR_DIR, filename ) ) + fiji_bioformats_jar_dir = os.path.join( FIJI_JAR_DIR, 'bio-formats' ) + if os.path.isdir( fiji_bioformats_jar_dir ): + for filename in os.listdir( fiji_bioformats_jar_dir ): + if filename.endswith( '.jar' ): + class_path_list.append( os.path.join( fiji_bioformats_jar_dir, filename ) ) + if FIJI_PLUGIN_DIR is not None and os.path.isdir( FIJI_PLUGIN_DIR ): + for filename in os.listdir( FIJI_PLUGIN_DIR ): + if filename.endswith( '.jar' ): + class_path_list.append( os.path.join( FIJI_PLUGIN_DIR, filename ) ) + if FIJI_OSX_JAVA3D_DIR is not None and os.path.isdir( FIJI_OSX_JAVA3D_DIR ): + for filename in os.listdir( FIJI_OSX_JAVA3D_DIR ): + if filename.endswith( '.jar' ): + class_path_list.append( os.path.join( FIJI_OSX_JAVA3D_DIR, filename ) ) + return class_path_list + +def kill_vm(): + javabridge.detach() + javabridge.kill_vm() + +def load_image( image_path, c=None, z=0, t=0, series=None, index=None, + rescale=True, wants_max_intensity=False, channel_names=None ): + """ + Load in image from a file using bioformats, always returning a tuple of + (image, scale) where the image is a numpy.ndarray object, and the scale + is an integer or None. + """ + result = bioformats.load_image( path=image_path, + c=c, + z=z, + t=t, + series=series, + index=index, + rescale=rescale, + wants_max_intensity=wants_max_intensity, + channel_names=channel_names ) + if wants_max_intensity: + # The value of result is a tuple: ( image, scale ) + image, scale = result + else: + image = result + scale = None + # The image is a numpy.ndarray object, and the scale is an integer or None. + return image, scale + +def start_vm( args=None, class_path=None, max_heap_size=None, run_headless=False ): + """ + Start the JVM via Javabridge. + """ + if class_path is None: + class_path = get_java_class_path() + # Start the JVM. + javabridge.start_vm( args=args, class_path=class_path, max_heap_size=max_heap_size, run_headless=run_headless ) + # Suppress Java logging to stdout. + java_stack = javabridge.make_instance( 'java/io/ByteArrayOutputStream', "()V" ) + java_stack_ps = javabridge.make_instance( 'java/io/PrintStream', "(Ljava/io/OutputStream;)V", java_stack ) + javabridge.static_call( 'Ljava/lang/System;', "setErr", '(Ljava/io/PrintStream;)V', java_stack_ps ) + java_out = javabridge.make_instance( 'java/io/ByteArrayOutputStream', "()V" ) + java_out_ps = javabridge.make_instance( 'java/io/PrintStream', "(Ljava/io/OutputStream;)V", java_out ) + javabridge.static_call( 'Ljava/lang/System;', "setOut", '(Ljava/io/PrintStream;)V', java_out_ps ) + javabridge.attach() + +def write_image( image_path, pixels, pixel_type, c=0, z=0, t=0, + size_c=1, size_z=1, size_t=1, channel_names=None, + move_to=None ): + """ + Write an image file using bioformats. Bioformats uses file extensions + (e.g., .job, .gif, etc) when reading and writing image files, so the + Galaxy dataset naming convention of setting all file extensions as .dat + is handled by setting the move_to parameter to the value of the Galaxy + dataset path. + """ + bioformats.write_image( pathname=image_path, + pixels=pixels, + pixel_type=pixel_type, + c=c, + z=z, + t=t, + size_c=size_c, + size_z=size_z, + size_t=size_t, + channel_names=channel_names ) + if move_to is not None and os.path.exists( move_to ): + shutil.move( image_path, os.path.abspath( move_to ) )
