magento 如何改变图像为jpg和设置dpi为300使用php?

w41d8nur  于 2023-01-05  发布在  PHP
关注(0)|答案(3)|浏览(139)

我在pngtojpgAction()下的一个控制器中有以下代码,我正在使用ajax调用它。
通过这个

$this->getRequest()->getParam('imagedata'));

语句我得到了一个类似于data:image/jpeg;base64,/9j/4AAQSkZJR......AH9T796KtUV1HGf/Z的模式
其是PNG图像数据。
现在我使用下面的代码来转换这个png图像到jpeg和增加dpi到300。

public function pngtojpgAction()   
{
    //Code to convert png to jpg image
    $input = imagecreatefrompng($this->getRequest()->getParam('imagedata'));
    $width=imagesx($input);
    $height=imagesy($input);
    $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);  
     
    ob_start();
    imagejpeg($output);
    $contents =  ob_get_contents();
    ob_end_clean();
     //echo 'data:image/jpeg;base64,'.base64_encode($contents); /*Up to here code works well*/
    
     $jpgImage='data:image/jpeg;base64,'.base64_encode($contents);

            
     $image = file_get_contents($jpgImage);

     $image = substr_replace($image, pack("cnn", 1, 300, 300), 13, 5);

     header("Content-type: image/jpeg");
     header('Content-Disposition: attachment; filename="'.basename($jpgImage).'"');
     echo  $image;
    
}

用这个

$image = substr_replace($image, pack("cnn", 1, 300, 300), 13, 5);

我想把图像的分辨率提高到300。
我无法使用以下代码行更改图像dpi

$jpgImage='data:image/jpeg;base64,'.base64_encode($contents);

$image = file_get_contents($jpgImage);

$image = substr_replace($image, pack("cnn", 1, 300, 300), 13, 5);

header("Content-type: image/jpeg");
header('Content-Disposition: attachment; filename="'.basename($jpgImage).'"');
echo  $image;

我使用此链接作为参考Change image dpi using php

mwg9r5ms

mwg9r5ms1#

在做了一些改变之后,它对我起作用了。

public function pngtojpgAction()   
{
            //Code to convert png to jpg image
        $input = imagecreatefrompng($this->getRequest()->getParam('imagedata'));
        $width=imagesx($input);
        $height=imagesy($input);
        $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);                  

        ob_start();
        imagejpeg($output);
        $contents =  ob_get_contents();
        //Converting Image DPI to 300DPI                
        $contents = substr_replace($contents, pack("cnn", 1, 300, 300), 13, 5);             
        ob_end_clean();     
        echo 'data:image/jpeg;base64,'.base64_encode($contents); 

}
e5njpo68

e5njpo682#

我会用imagemic来代替:

convert Bird.jpg -density 300 Bird2.jpg

但你也可以和动力局一起做。
Link to class

$filename = 'Bird.jpg';
$source = imagecreatefromjpeg($filename);
list($width, $height) = getimagesize($filename);

$b = new Resampler;
$im = $b->resample($source, $height, $width, 300);

file_put_contents('Bird2.jpg', $im);

在Windows环境下测试。

xyhw6mcr

xyhw6mcr3#

简单的代码来重新生成可调质量的图像。

function compress_image($source_url, $destination_url, $quality) {
    $info = getimagesize($source_url);
    $image = imagecreatefromjpeg($source_url);
    imagejpeg($image, $destination_url, $quality);
    return $destination_url;
}
echo compress_image($_FILES["file"]["tmp_name"], "destination .jpg", 80);//Adjust Quality

注意:确保安装了PHP的GD库。

相关问题