PHP将PDF转换为JPG后想象出黑色区域

时间:2017-07-27 10:23:21

标签: php pdf imagick

我使用Imagick为PDF文件生成JPG缩略图,但其中一些生成黑色区域(http://i.imgur.com/fKBncKw.jpg) - 我假设它是由PDF中的透明度引起的但是可以做些什么吗?

代码I用于生成这些:

$imagick = new Imagick($filename);
$imagick->setIteratorIndex(0);
$imagick->setImageFormat('jpg');
return $imagick->getImageBlob();

有没有办法压平PDF和/或添加白色背景,以便黑色区域不会出现?

3 个答案:

答案 0 :(得分:1)

试试此代码:Imagick::setCompressionQuality

$im = new imagick(realpath($file).'[0]');
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(100);
$im->setImageFormat("jpeg");
$im->writeImage("imagename.jpg");

替代方案:这可能有所帮助:

<?php

//Note that the function returns an Imagick object and does not modify the existing object. Below is my code for converting a PNG with transparency into a JPG with a background color. This code illustrates the difference.


$im = new Imagick($filename);
$im->setImageBackgroundColor('white');

$im->flattenImages(); // This does not do anything.
$im = $im->flattenImages(); // Use this instead.

$im->setImageFormat('jpg');
$im->writeImage('image.jpg');

?>

答案 1 :(得分:1)

这是一个只适用于PNG到JPG的解决方案。 此代码为PNG中的透明区域添加了白色背景,并将其转换为JPG。

它做什么?

此代码从文件夹中获取所有PNG图像,将它们转换为具有白色背景的JPG,并将它们保存在另一个文件夹中。

<?php
ini_set('max_execution_time', 3000); 

$dir = 'transparent/';
$arr = scandir($dir);

for($i=0;$i<count($arr);$i++)
{
    if($i==0 || $i==1)
    {
    }
    else{

    $input_file = "transparent/".$arr[$i];
    $output_file = "White/".str_replace('.png','.jpg',$arr[$i]);

    $input = imagecreatefrompng($input_file);
    list($width, $height) = getimagesize($input_file);
    $output = imagecreatetruecolor($width, $height);
    $white = imagecolorallocate($output,  255, 255, 255);
    imagefilledrectangle($output, 0, 0, $width, $height, $white);
    imagecopy($output, $input, 0, 0, 0, 0, $width, $height);
    imagejpeg($output, $output_file);

    }
}
?>

PHP中的图像处理和GD。 http://jsfiddle.net/s76yrwwm/2/

希望它有所帮助,你可以根据需要改变它。

答案 2 :(得分:0)

像这样使用

类ImageConvertorLib {

private $CI;

/**
 * loading codeIgniter instance
 */
public function __construct(){
    $this->CI =& get_instance();
}

public function pdfToJpg($param){
    $filename = $param['filename'];
    $image_name = $param['image_name'];
    $path = $param['path'];
    $db_path = $param['db_path'];
    $im = new Imagick();
    $im->setResolution(220,220);
    $im->readimage($filename."[0]");
    $im->setImageFormat('jpeg');
    $im->setImageBackgroundColor('#ffffff');
    $im->flattenImages();
    $image_name = $image_name.".jpg";//"save_as_name.jpg";
    $imageprops = $im->getImageGeometry();
    /*if ($imageprops['width'] <= 175 && $imageprops['height'] <= 300) {
     // don't upscale
     } else {
     $im->resizeImage(175,300, imagick::FILTER_LANCZOS, 0.9, true);
     }*/

    $im->writeImage($path.$image_name);
    if($im){
        $Img = array();
        $Img['status'] = 1;
        $Img['image'] = ($db_path.$image_name);
        return $Img;
    }
    $im->clear();
    $im->destroy();
}

}