ReadImage 和 ReadImageFile 之間有什麼區別?查看頁面後,您會認為它們的行為完全相同,只是在它們的參數中有所不同:ReadImage 接受一個包含檔案資料夾位置的字串,而 ReadImageFile 接受一個指向檔案位置的控制代碼。最初,第一個看起來更具吸引力,因為您不必擔心 fopen 和 fclose 命令。
但是,ReadImage 函式存在問題!使用由此函式建立資料的 imagemagick 物件,我可以縮放、更改顏色,並對物件執行藝術效果,完全沒有任何問題,但隨後在儲存時出現問題:它似乎讓我停留在原始影像的影像格式(在這種情況下,為 ".jpg",但在其他地方可能有所不同)。程式碼逐行撰寫的函式 setImageFormat 和 setFormat 無法將格式變更為 png、bmp 或 gif。當我變更的唯一程式碼行是將 ReadImage 變更為 ReadImageFile 時,問題完全消失。
一些範例程式碼來示範(使用 PHP 版本 5.2.17)。輸入檔案名稱:test.jpg。輸出檔案名稱:test_result_bad.bmp、test_result_bad.png、test_result_good.bmp、test_result_good.png。結果檔案大小應該足以讓您相信所有錯誤檔案都只是重複的 jpg...
<?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);
?>