Imagick::readImage

(PECL imagick 2, PECL imagick 3)

Imagick::readImage从文件名读取图像

描述

public Imagick::readImage(string $filename): bool

从文件名读取图像

参数

filename

返回值

成功时返回 true

添加注释

用户贡献的注释 3 个注释

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 文件中读取页面,请在文件名后使用 [PAGENUMBER](页面从零开始!)。

示例:从 test.pdf 读取第 1 页

<?php
$imagick
= new Imagick();
$imagick->readImage('test.pdf[0]');
$imagick->writeImage('page_one.jpg');
?>
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

// 作者:[email protected]

// 预设图像位置
// ------------------------------

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

?>
lindsay at axys dot co dot nz
9 年前
如果您刚刚上传了 PDF 文件并想从第一页生成图片,则需要在图片名称中添加 [0] 作为文本字符串。

$filename = getSafeFileName($uploaddir,basename($_FILES['brochure_pdf']['name'], $overwrite));
$uploadfile = $uploaddir . $filename;
if (move_uploaded_file($_FILES['brochure_pdf']['tmp_name'], $uploadfile)) {
$brochure_pdf = $filename;
$im = new Imagick();
$im->setResolution(80,80);
$im->readimage($uploadfile."[0]");
$im->setImageFormat('jpeg');
$image_name = "save_as_name.jpg";
$imageprops = $im->getImageGeometry();
if ($imageprops['width'] <= 175 && $imageprops['height'] <= 300) {
// 不要进行放大
} else {
$im->resizeImage(175,300, imagick::FILTER_LANCZOS, 0.9, true);
}

$im->writeImage($uploaddir .$image_name);
$im->clear();
$im->destroy();
To Top