PHP Imagick - 显示第一片mutli图像TIFF

时间:2015-11-23 11:08:43

标签: php imagemagick imagick

我正在尝试在HTML页面中显示多图像TIFF的第一个切片。因此,我正在尝试使用Imagemagick以某种方式将TIFF转换为广泛支持的格式,如JPG或PNG。我正在使用以下代码:

<?php 
$im = new imagick('my_image.tif');
$im->setImageFormat('jpeg');

header("Content-Type: image/jpeg");
ob_start();
$thumbnail = $im->getImageBlob();
$contents =  ob_get_contents();
ob_end_clean();

echo "<img src='data:image/jpg;base64,".base64_encode($thumbnail)."' />";

 ?>

此代码在读取JPG文件时工作正常 - 但对于TIFF文件,这会显示某些内容 - 但不会显示我的TIFF文件的内容。我想我必须提交TIFF文件属性,就像我正在创建它们一样? TIFF文件是在C程序中创建的:

 TIFF* tif;
 tif = TIFFOpen(filename, "w");
 TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, columns);
 TIFFSetField(tif, TIFFTAG_IMAGELENGTH, rows);
 TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
 TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 32);
 TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP);

 for (i = 0; i < rows; i++)
     TIFFWriteScanline(tif, &data[i * columns], i, 0);

 TIFFWriteDirectory(tif);
 TIFFClose(tif);

如何正确转换才能显示在我的网页上?另外,如何选择要显示的图像?理想情况下,网页的用户将能够滚动TIFF文件的切片。谢谢!

1 个答案:

答案 0 :(得分:1)

如果你有一个多页TIFF,你可以通过在文件名后面的方括号中放置页码(从零开始索引)来提取特定页面,所以对于前两页:

convert multipage.tif[0] page1.jpg
convert multipage.tif[1] page2.jpg

我不记得获取页数的简单方法,但你可以运行这个并计算行数,直到我这样做: - )

identify multipage.tif
multipage.tif[0] TIFF 1x1 1x1+0+0 16-bit sRGB 830B 0.000u 0:00.000
multipage.tif[1] TIFF 1x1 1x1+0+0 16-bit sRGB 830B 0.000u 0:00.000
multipage.tif[2] TIFF 1x1 1x1+0+0 16-bit sRGB 830B 0.000u 0:00.000

那个有3页,编号为0-2。