日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP 5 » GDで画像を操作したときに幅広のファイルのサイズが減ってしまう

GDで画像を操作したときに幅広のファイルのサイズが減ってしまう

ページ: 1

投稿者 投稿
会員
登録者: 10 2009
返信数: 1
はじめまして、
現在WEBシステムで
画像登録をする際に回転させてサーバに保存するプログラムを
作成しています。

さてそこで問題なのが、
回転をかける前とかけた後でファイルサイズが変化しています。

memoly_limit も128Mとかにも上げてみましたが、
現象が回復できません、どなたか同じような現象で解決方法をご存じないでしょうか

環境
PHP 5
CentOS 5.2
会員
登録者: 8 2009
返信数: 103
こんにちは、解決方法はありません。
環境は詳しく書きましょう。
それとソースを提示してくれると検証しやすいです。

Windows Vista sp2 + php5.2.11 + gd2.0.34
example.php
<?php

$imgname = "sample.png";
$before = "before.png";
$after = "after.png";

$img = imagecreatefrompng($imgname);
$imgbefore = $img;
$imgafter = imagerotate($img, 90, 0);

imagepng($imgbefore, $before);
imagepng($imgafter, $after);

imagedestroy($imgbefore);
imagedestroy($imgafter);

?>

元画像
sample.png 1920x1200 818,014

回転前
before.png 1920x1200 852,119

回転後
after.png 1200x1920 856,247


確かにファイルサイズは回転前と後では変わりますね。
縦と横の解像度が変わるわけですから圧縮アルゴリズムが関係しているのでは?
データの並びが変わるので同じ圧縮アルゴリズムでもサイズに違いがでるでしょう。
なので現象を回避する方法はないと思います。

私は元画像を加工せずデータベースに格納して、取り出す時に
合成とかクオリティを指定して書き出しています。
特にjpgは非可逆圧縮なので書き出しは最小限にしています。



上記ソースをjpg用に書き換えて検証してみましたがpngより差が2倍位大きいですね。

元画像
sample.jpg 1600x1200 510,785

回転前
before.jpg 1600x1200 229,724

回転後
after.jpg 1200x1600 238,810


ちなみに手持ちのbmpは回転後もファイルサイズは変わらなかったです。
非圧縮だからでしょうね。



ここまで書いて題名を見たらサイズが減るんですね。
単にクオリティの指定をせずに書き出しているだけではないですか?
jpgの場合指定しないと75%のクオリティで書き出されます。

ページ: 1

日本PHPユーザ会 掲示板 » PHP 5 » GDで画像を操作したときに幅広のファイルのサイズが減ってしまう

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています