質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • PHP

    20815questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

imagejpeg関数のquality(圧縮値)

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 999

ERINGI5

score 14

PHPでアップロードしたJPEG画像をimagerotateした後にimagejpegしているのですが
imagejpegの第3引数の値を決めれないでいます....

できる限りアップロードした画像のサイズ(容量)と同等な状態で出力したいのですが
そのような指定はできないのでしょうか?
または、ベストなqualityはどのように算出すればいいでしょうか?
ご教授お願いいたします。

テキトーな画像でサイズが変わらないqualityを調べてみたのですが以下の結果となりました。
qualityが90以降では見た目に影響はでないとどこかのサイトで書かれておりましたが.....

106,314byteの画像

 quality   圧縮後 
    97        114,809     
    96        101,654     
    95        91,938     

64,712byteの画像

 quality   圧縮後 
    95        127,548     
    90        84,951     
    85        66,812     
    84        64,896     
    83        63,028     

235,734byteの画像

 quality   圧縮後 
    95        445,991    
    90        320,735    
    85        259,654    
    83        245,223    
    82        236,743    
    81        230,756    

228,421byteの画像

 quality   圧縮後 
    95        316,441    
    92     235,979 
    91     224,856 
    90        212,414    
    85        164,018    
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

画像そのものを回転する訳ですので元画像と同じ画像ではなくなりますから、同じ容量にはならないのは理解いただけるかと思います。
(同じくらいにはなるはずですが)

どういう理由で回転させたいのかがわからないのでなんとも言えませんが、一つの案として容量を変更したくないのでしたら回転方向だけ決め、PHPではそのまま書き出してCSSでrotateさせてはいかがでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/28 10:52

    ご返事が遅くなって申し訳ありません。
    ご回答ありがとうございます。

    おっしゃる通りcssでrotateしてあげれば画像劣化も気にせず対応できそうですね。

    キャンセル

+1

不可逆圧縮の JPEG だと、今使われている正確な圧縮時のパラメータを知る方法は無かったように思います。また、EXIF など外部のメモ情報として品質パラメータが付与されていたとしても、その内容が必ずしも正しい保証もありませんし、正しかったとして、圧縮に使用した画像ライブラリに特化した圧縮パラメータであるために、自分達の処理系において意図した値ではないことも十分考えられます。

そのため、元の画像を何度か保存し直して近いサイズになったものから保存時の品質パラメータを推測する。というのが実現可能な方法だと思われます。無駄に負荷がかかるのは間違いないので、規模によっては躊躇してしまう方法ですが、システムに対して初回の画像登録時に品質パラメータを推測して、画像と紐付ける処理にしておけば、毎回計算する必要も無くなりますので、その流れにしてしまえば、なんとかなりそうにも思います。

しかし、登録時点でシステム固有の品質変換と縦横のサイズが大きすぎる場合のリサイズを行い、以後全てその設定で扱う。というような仕様にしておく方が無駄に巨大なファイルを投げられた時に、トラブルを避けられるため、その方が一般的な仕様だと思いますが『元の品質を維持した上での加工』が重要な要件であれば、上記に挙げた方法も適用できるかもしれません。

以上、ご参考になれば幸いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/28 10:47

    ご回答ありがとうございます。

    画像関連の知識が乏しくいろいろご教授いただき大変助かります。

    ご教授いただいた内容で対応可能そうですね。
    (負荷に関しても問題なさそうです。)

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    テーブル内での改ページ挿入について

    MySQLより取得したデータをforeachループでテーブル化したものを印刷しようとしています。印刷時のレイアウトを揃えるため、foreachのキーを使って以下のように20行ごとに

  • 解決済

    C# 配列に配列を代入した際、配列が同期?される

    VisualStudio2015 C# で 以前コードを書いている際に、 int[] a new = int[3] int[] b new = int[4] a =

  • 解決済

    theadやtbodyの記述の任意性

    theadタグやtbodyタグを今まで書かずにhtml作ってたのですが、これらの記述って任意と考えていいんでしょうか。 theadやtbodyを使わずに(table,tr,t

  • 解決済

    movie_id title user_id ratingの順に列に表示される理由

    movie_id title  user_id  ratingの順に列に表示される理由がわかりません。 import pandas as pd r_cols = ['user

  • 解決済

    サーバ側でのキャッシュ管理

    いつもお世話になっております。 webシステム開発初心者です。 今私は、4Dというものを使って十人ぐらいが一斉にアクセスできるwebシステムを作っていて その時のフォームデ

  • 受付中

    2000hzの音声ファイルを作成する方法

    前提・実現したいこと Unityを使ったゲームでWiiリモコンをコントローラーとして制作しています。 Wiiリモコンのスピーカーから音声を再生したいです。 符号付8bit,サン

  • 解決済

    facebookライクなSNSのDBテーブル構造について

    現在、facebookライクのSNSをPHPで開発をするためのDB設計を行っています 仕様としてはfacebookの主要仕様をベースに考えています 友達リクエスト → リ

  • 解決済

    引数が無効というエラーについて

    Photoshopのスクリプト(javascriptのようです)でもこちらで質問しても大丈夫でしょうか? 問題自体は解決したものの、どうして解決できたのかが分かっておらず 今後のた

同じタグがついた質問を見る

  • PHP

    20815questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。