What is the difference between ReadImage and ReadImageFile? Based by looking at the pages, you would think that they behave the exact same, except in their arguments: ReadImage takes a string containing the folder location of the file, and ReadImageFile takes a handle pointing to the file location. Initially, the first looks far more tempting, since you don't have to worry about fopen and fclose commands.
But, there is a problem with the ReadImage function! With an imagemagick object whose data was created from this function, I could scale, change the colors, and perform artistic effects upon the object, without any problems at all, but then there was a problem with saving: it seemed to be keep me stuck to the image format of the original image (in this case, a ".jpg", but it may be different elsewhere). The functions setImageFormat and setFormat, programmed line after line, provided no effect to changing the format to png, bmp, or gif. When the only line of code I changed was ReadImage to ReadImageFile, the problem disappears entirely.
Some sample code to demonstrate (using PHP Version 5.2.17). Input Filename: test.jpg. Output Filenames: test_result_bad.bmp, test_result_bad.png, test_result_good.bmp, test_result_good.png. The resultant filesizes should be enough to convince you that all bad files are merely duplicate jpgs...
<?php
$image_file_location = "test.jpg";
$imagick_type_bad = new Imagick();
$imagick_type_good = new Imagick();
$imagick_type_bad->readImage($image_file_location);
$file_handle_for_viewing_image = fopen($image_file_location, 'a+');
$imagick_type_good->readImageFile($file_handle_for_viewing_image);
fclose($file_handle_for_viewing_image);
$file_handle_for_saving_bad_bmp = fopen("test_result_bad.bmp", 'a+');
$imagick_type_bad_bmp = clone $imagick_type_bad;
$imagick_type_bad_bmp->setImageFormat("bmp");
$imagick_type_bad_bmp->setFormat("bmp");
$imagick_type_bad_bmp->writeImageFile($file_handle_for_saving_bad_bmp);
fclose($file_handle_for_saving_bad_bmp);
$file_handle_for_saving_bad_png = fopen("test_result_bad.png", 'a+');
$imagick_type_bad_png = clone $imagick_type_bad;
$imagick_type_bad_png->setImageFormat("png");
$imagick_type_bad_png->setFormat("png");
$imagick_type_bad_png->writeImageFile($file_handle_for_saving_bad_png);
fclose($file_handle_for_saving_bad_png);
$file_handle_for_saving_good_bmp = fopen("test_result_good.bmp", 'a+');
$imagick_type_good_bmp = clone $imagick_type_good;
$imagick_type_good_bmp->setImageFormat("bmp");
$imagick_type_good_bmp->setFormat("bmp");
$imagick_type_good_bmp->writeImageFile($file_handle_for_saving_good_bmp);
fclose($file_handle_for_saving_good_bmp);
$file_handle_for_saving_good_png = fopen("test_result_good.png", 'a+');
$imagick_type_good_png = clone $imagick_type_good;
$imagick_type_good_png->setImageFormat("png");
$imagick_type_good_png->setFormat("png");
$imagick_type_good_png->writeImageFile($file_handle_for_saving_good_png);
fclose($file_handle_for_saving_good_png);
?>