PHP Conference Japan 2024

Imagick::readImage

(PECL imagick 2,PECL imagick 3)

Imagick::readImage從檔案名稱讀取圖片

說明

public Imagick::readImage(字串 $filename): 布林值

從檔案名稱讀取圖片

參數

filename

傳回值

成功時傳回 true

新增註解

使用者貢獻的註解 2 則註解

24
markus dot s dot schmitz at gmail dot com
11 年前
使用此方法將 PDF 的所有頁面轉換為 JPG

<?php
$imagick
= new Imagick();
$imagick->readImage('myfile.pdf');
$imagick->writeImages('converted.jpg', false);
?>

如果您需要更好的品質,請在讀取檔案之前嘗試新增 $imagick->setResolution(150, 150);!

如果您在將 PDF 轉換為 JPEG 時遇到透明度問題(黑色背景),請嘗試將您的檔案扁平化

<?php
$imagick
= new Imagick();
$imagick->readImage('myfile.pdf[0]');
$imagick = $imagick->flattenImages();
$imagick->writeFile('pageone.jpg');
?>

為了從 PDF 檔案讀取頁面,請在檔案名稱後使用 [頁碼](頁碼從零開始!)。

範例:從 test.pdf 讀取第 1 頁

<?php
$imagick
= new Imagick();
$imagick->readImage('test.pdf[0]');
$imagick->writeImage('page_one.jpg');
?>
11
holdoffhunger at gmail dot com
11 年前
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

// 作者:holdoffhunger@gmail.com

// 預設圖片位置
// ------------------------------

$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);

?>
To Top