note 111059 added to imagick.readimage
| From: | holdoffhunger at gmail dot com | Date: | Thu, 10 Jan 2013 15:50:08 +0000 |
| Subject: | note 111059 added to imagick.readimage | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-192887@lists.php.net to get a copy of this message | ||
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
// Author: holdoffhunger@gmail.com
// Preset Image Location
// ------------------------------
$image_file_location = "test.jpg";
// Create Objects
// ------------------------------
$imagick_type_bad = new Imagick();
$imagick_type_good = new Imagick();
// Grab Data - BAD METHOD
// ------------------------------
$imagick_type_bad->readImage($image_file_location);
// Grab Data - GOOD METHOD
// ------------------------------
$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);
// Save File - BAD DATA
// ------------------------------
$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);
// Save File - Good DATA
// ------------------------------
$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);
?>
----
Server IP: 69.147.83.199
Probable Submitter: 68.14.150.111
----
Manual Page -- http://php.net/manual/en/imagick.readimage.php
Edit -- https://master.php.net/note/edit/111059
Del: integrated -- https://master.php.net/note/delete/111059/integrated
Del: useless -- https://master.php.net/note/delete/111059/useless
Del: bad code -- https://master.php.net/note/delete/111059/bad+code
Del: spam -- https://master.php.net/note/delete/111059/spam
Del: non-english -- https://master.php.net/note/delete/111059/non-english
Del: in docs -- https://master.php.net/note/delete/111059/in+docs
Del: other reasons-- https://master.php.net/note/delete/111059
Reject -- https://master.php.net/note/reject/111059
Search -- https://master.php.net/manage/user-notes.php