[画像処理][PHP]GDライブラリを使っている際に表示されるエラーへの対処法

PHPのGDライブラリを使っていると稀に以下のようなエラーに出会うことがあります。

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg, libjpeg: recoverable error: Premature end of JPEG in /path/to/file.php on line xxx

ネットで調べる限りでは、このエラーはjpgファイルが破損している場合に起きるケースが多いようです。
結論から言うと完全な解決法は見つけることができなかったのですが、私なりの対処法をご紹介します。

解決法

「ファイルが壊れているのであれば、修復してしまえばいい」
というのが解決法です。
なんというか、シンプルな解決法なのですがこれが結果的に一番簡単でした。

大量のファイルを処理する場合であれば少し面倒かもしれませんが、
MacであればImageOptimなどに壊れたファイルを突っ込むと壊れていないjpgになります。
元々壊れているファイルなので見た目がきれいな画像が出来上がる保証はありませんが、jpgファイルという意味では破損はなくなるようです。
(ついでにファイルサイズも小さくなりますが、画質が少し落ちるかな?という印象)

試してはいないですが、ブラウザから使えるJPEGminiなどを利用してもいいのではないかと思います。

修正したファイルであればGDライブラリは正常に動作するようですので、リサイズなりなんなり自由自在というわけです。
元々が破損したファイルなので「画像の半分が見れない!」などということもあるかもしれませんが、
業務などで大量の画像ファイルのリサイズ処理をGDでやる必要が出てきた場合には検討してみてください。
リサイズするだけなら縮小専用でいいような気もしますが。

とりあえず破損したままでも処理を続行

このサイトに書かれていた方法です。
http://www.atyks.org/blog/detail/2011-10-14-9
以下の記述を追加することで処理の実行は進むようです(未確認です。。。)。

ini_set("gd.jpeg_ignore_warning", 1);

おわりに

海外であれば情報はある程度あるのですが、日本語での情報が少ないようだったので簡単にですが紹介しました。
海外記事

株式会社みのモンでは、たくさんの画像を掲載する必要があるようなサイトの構築のご相談もお待ちしております。
上記GDライブラリも必要であれば使いますし、そのサイトにあった方法で構築をいたします。
PHPを使った大規模なシステム開発から、ホームページ(PC・スマホサイト)構築などのご相談はお気軽にどうぞ!
株式会社みのモンのホームページはこちら

【サイト管理者向け】スマホサイトに埋め込まれたYoutubeが再生できない場合の対処法

このページはサイトを作る方向けの情報です。サイトを閲覧している方向けの対処法は掲載しておりませんのでご注意ください。

自社のサイトにYoutubeにアップしたPR動画などを埋め込みたいことがあると思います。
埋め込んでみていざ確認してみると……「この動画は現在再生できません」と表示されるケースがあります。

これは埋め込む側の設定で対処できるケースがあるので、その対処法をまとめました。
※今回は検証した環境はiPhone5s(iOS 7.0.4)のSafariです。

Youtubeの動画の埋め込み方法

すでにYoutube動画の埋め込みコード取得の方法を知っている方はこの部分は読み飛ばしていただいてOKです。

1.埋め込みたい動画を表示する

まずは埋め込みたい動画のページを表示してください。
今回は説明用サンプルとして「https://www.youtube.com/watch?v=KyCYyoGusqs」を使っています。

2.動画の下にある「共有」タブをクリック

step2

3.「共有」タブをクリックして表示された部分にある「埋め込みコード」をクリック

step3

4.表示されたHTMLコードをコピーして、埋め込みたい部分に貼り付ける

step4

以上が基本的なYoutubeの動画を埋め込む際の手順になります。

埋め込んだ動画が再生されない!

ここからが本題です。
おそらく埋め込んだ動画はPCでは再生できると思います。
(PCでも再生できないケースがあるようですが、ここでは省略します)

Youtubeの埋め込みの標準設定

Youtubeから動画を埋め込む際の標準の設定は以下のようになっていると思います。
動画のサイズ:560×315
動画が終わったら関連動画を表示する(チェックあり
プライバシー強化モードを有効にする(チェックなし)
以前の埋め込みコードを使用する(チェックなし)

標準設定のままの動画


再生すると私の環境では「この動画は現在再生できません」と表示され、埋め込んだ動画が再生できませんでした。

解決方法

解決方法は至ってシンプルでした。
「プライバシー強化モードを有効にする」にチェックを入れる
これだけです!
answer

「動画が終わったら関連動画を表示する」にチェックを入れるかどうかはどちらでも大丈夫だと思います。
「以前の埋め込みコードを使用する」はチェックを入れない方がいいと思います(未検証)。

埋め込みコードを変更した後の動画

再生を始めるとYoutubeアプリが立ち上がって再生されました。

おわりに

動画のソースが「プライバシー強化モードを有効にする」にチェックを入れる前は、
www.youtube.com
だったのに対して、チェックを入れた後は、
www.youtube-nocookie.com
になっているようです。

Youtubeは動画をアップロードしてサイトに埋め込む際に非常に役に立つサービスですが、サイトに埋め込んでも実際に再生できないと意味がありません。
ちょっとした設定を変えるだけで再生可能になるので覚えておくと何かの時に役に立つかもしれませんね!

おまけ

スマホ向けのページに埋め込む場合にはプレイヤーのサイズを以下のようにしておくと良さそうです。
appendix
「動画のサイズ」の部分を「カスタムサイズ」にして、左側の入力ボックスに「320」と入力すればOKです。
(右側の入力ボックスには自動でサイズが計算されます)
iPhone向けだとこの設定がいいのではないでしょうか。

ランダム文字列生成ツールを公開します

ランダム文字列生成ツールを作成しましたので公開します。

一部の識別しにくい文字列を除いた文字の中から指定した文字数でランダムな文字列が生成されます。
複数件生成されるので、気にいる結果が出るまで何回もリロードする必要がないです。

tools_make_kw
ランダム文字列生成ツール

仮のパスワードを生成する場合など、何でもいいので長い文字列が欲しい!という際に使って下さい。

仕組みは、裏でPHPを使っています。

  1. リクエストされた文字種からランダム文字列用に使う文字を選ぶ
  2. 選ばれた文字群からランダムに字を決まった数だけ抽出

という超基本的なことをやってるだけなんですけどね^^

プログラム的には難しいものではないですが、
社内でのテストの際などに意外と活躍してくれてます。

他にも便利ツールを作成したら紹介したいと思います。