2

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

画像のdpiを300dpiに上げたいです。

これらのコード行を使用して画像の 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;

このリンクを参照として使用しましたPHPを使用して画像のdpiを変更する

4

3 に答える 3

4

いくつかの変更を加えた後、それは私にとってはうまくいきました。

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

}
于 2013-05-10T15:29:07.803 に答える
3

代わりに imagemagic を使用します。

convert Bird.jpg -density 300 Bird2.jpg

しかし、GD でそれを行うこともできます。

クラスへのリンク

$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環境でテスト済み。

于 2013-05-03T18:48:37.310 に答える