<?
// Run this sample from the same directory where the floStereoImg.php file is,
// or adjust the path here:
include("floStereoImg.php");
// The following are flags which can be passed into the instantiation.
// The values listed below are also the defaults which can be applied by
// ommitting in the instantiation or giving it null.
// This flag is currently untested, use at your own risk. The goal is that
// temp files will be used to store the images instead of image resources.
$use_cache_files = false;
// Also settable in an instantiated class with this method:
// set_cache_to_temp_folder($use_cache_files)
// This flag is well tested. It specifies that any image resources the class
// uses but does not need will be destroyed.
$destroy_objects = true;
// Also settable in an instantiated class with this method:
// set_aggressive_resource_destruction($destroy_objects)
// This flag instructs the class to automatically crop any generated stereo
// images. This is only important if you adjust the offset of the image.
$auto_crop = true;
// Also settable in an instantiated class with this method:
// set_cache_to_temp_folder($use_cache_files)
// This flag sets which method of anaglyph production (red/cyan, etc.) is
// created with generate_anaglyph_resource(), imagepng_anaglyph($file_path = null)
// and imagejpeg_anaglyph($file_path = null).
$channel_map = "floRC-C";
// Also settable in an instantiated class with this method:
// set_anaglyph_channel_map($channel_map)
// The list of available channel maps can be found in the method:
// get_supported_channel_maps(). Pass in the KEY of the Key/Value pair.
// The Value is a human readable description.
// To use this class, we need an instance.
$flostereoimg = new floStereoImg($use_cache_files, $destroy_objects, $auto_crop, $channel_map);
// To try the different methods of loading the stereo image, change this value:
$image_load_method = 1;
switch($image_load_method) {
case 1:
// Method 1 (for this sample, not significant for the class itself):
// Load a cross-eye image path. (Uses image_create_from_string to
// automatically determine the type of image.)
$flostereoimg->set_stereo_image_location("stereo.pns");
break;
case 2:
// Method 2:
// Load a cross-eye image resource. Loading by resource is clearly
// more useful if you already have a resource you're manipulating.
$stereo_image = imagecreatefrompng("stereo.pns");
$flostereoimg->set_from_stereo_resource($stereo_image);
break;
// Note, the standard is that the eyes will be on the opposite side of the
// image from their location on the head. This is because the standard was
// made to easily convert from cross-eye files which have long since been
// available and standard. Occationally, a parallel-eye image exists, and so
// I've added the swap_eyes() method to make conversion convenient.
case 3:
// Method 3:
// Load a parallel-eye image path.
$flostereoimg->set_stereo_image_location("parallel.png");
$flostereoimg->swap_eyes();
break;
case 4:
// Method 4:
// Load a parralel-eye image resource.
$stereo_image = imagecreatefrompng("parallel.png");
$flostereoimg->set_from_stereo_resource($stereo_image);
$flostereoimg->swap_eyes();
break;
case 5:
// Method 5:
// Load each seperate eye image path.
$flostereoimg->set_left_image("left.png");
$flostereoimg->set_right_image("right.png");
break;
case 6:
// Method 6:
// Load each seperate eye image resource. Do not destroy the
// image resouces passed in because that will remove the reference
// inside the class itself as well.
$left_image_resource = imagecreatefrompng("left.png");
$flostereoimg->set_left_resource($left_image_resource);
$right_image_resource = imagecreatefrompng("right.png");
$flostereoimg->set_right_resource($right_image_resource);
break;
}
// After the source images have been loaded we can adjust and output them:
// To try different adjustment's, set the value here:
$adjustment_method = 1;
switch ($adjustment_method) {
case 1:
// Method 1:
// If the right and left images are not correctly aligned, you
// can move them around in the resulting stereo images:
// These define the movement of the left image relative to the right:
$x = 10;
$y = 5;
// If you have made any previous adjustments, setting this to true will
// add the new adjustments to the previous. This is useful if you are
// somehow previewing the output while keeping the floStereoImg obejct
// instantiated.
$relative = false;
$flostereoimg->set_offset_correction($x, $y, $relative);
break;
case 2:
// Method 2:
// If you have 2 points on the left and right you want to be at
// the same place in the stereo results, you can speficy them and
// the offsets will be generated automatically:
$right_x = 120;
$right_y = 200;
$left_x = 122;
$left_y = 198;
$flostereoimg->set_offset_correction_stereo($right_x, $right_y, $left_x, $left_y);
break;
case 3:
// Method 3:
// If you have a need to change the flags initially passed into the
// class, you can do so using these methods (the values here are the
// opposite of the default values set on class instantiation):
$flostereoimg->set_aggressive_resource_destruction(false);
$flostereoimg->set_auto_crop(false);
// Again, this method is completely untested. It will be tested...it just isn't yet.
$flostereoimg->set_cache_to_temp_folder(true);
// You can also change the channel_map on the class. This is useful if
// you want to output an anaglyph image in one style (e.g. red/cyan)
// and then another (e.g. magenta/green):
// Remember that it is the KEY of the array here that you pass back into the function:
$possible_channel_maps = array_keys($flostereoimg->get_supported_channel_maps());
// For this example, I'll just get a random channel map.
shuffle($possible_channel_maps);
$random_channel_map = array_shift($possible_channel_maps);
$flostereoimg->set_anaglyph_channel_map($channel_map);
break;
}
// To try the different methods of output, change this value:
$output_method = 1;
switch ($output_method) {
case 1:
// Method 1:
// Write the left and right eyes to seperate image files.
// NOTE: The swap_eye() method only affects stereo output.
$flostereoimg->imagejpeg_left("left.jpg");
$flostereoimg->imagejpeg_right("right.jpg");
$flostereoimg->imagepng_left("left.png");
$flostereoimg->imagepng_right("right.png");
break;
case 2:
// Method 2:
// Write the standard stereo images to seperate image files.
$flostereoimg->imagejps("stereo.jps");
$flostereoimg->imagepns("stereo.pns");
// Alternatively, since technically these are standard jpeg and png
// files respectively, you can use those file extentions:
$flostereoimg->imagejps("stereo.jpg");
$flostereoimg->imagepns("stereo.png");
break;
case 3:
// Method 3:
// Output parallel-eye format images. I am not including jps and
// pns because parallel-eye format is not compatible with these
// file extensions. Parallel-eye format does not appear to be a
// well accepted standard.
// The key difference is that the eyes are on the opposite side of the
// image:
$flostereoimg->swap_eyes();
$flostereoimg->imagejps("parallel.jpg");
$flostereoimg->imagepns("parallel.png");
// But you must put them back or else any other calls will have the
// eyes reversed:
$flostereoimg->swap_eyes();
break;
case 4:
// Method 4:
// This is why you came. Output an anaglyph image:
// First, though I have provided it, I do not recommend jpeg output
// because jpeg compression distorts the anaglyph image.
$flostereoimg->imagejpeg_anaglyph("anaglyph.jpg");
// png output, on the other hand does not.
$flostereoimg->imagepng_anaglyph("anaglyph.png");
break;
case 5:
// Method 5:
// Get an anaglyph image resource. Use if you have further
// php processing you would like to do on the image before
// outputting it.
$anaglyph_image = $flostereoimg->generate_anaglyph_resource();
break;
case 6:
// Method 6:
// Get a stereo image resource. This will return the standard
// cross eye image side by side unless passed true.
$give_me_unstandard_parallel_eye_instead = false;
$stereo_image = $flostereoimg->generate_stereo_resource($give_me_unstandard_parallel_eye_instead);
}
?>
|