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

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

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

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

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

imagick

IMagickは、PHPからImageMagickを使う場合に使用する拡張インターフェースです。PHPで簡単にImageMagickの機能が利用できます。

Q&A

解決済

1回答

2780閲覧

php ImageMagickでサーバー上の画像ファイルを一括圧縮をかけてます。破損ファイルがあるとエラーが出来ます。

komurojun

総合スコア17

PHP

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

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

imagick

IMagickは、PHPからImageMagickを使う場合に使用する拡張インターフェースです。PHPで簡単にImageMagickの機能が利用できます。

0グッド

0クリップ

投稿2021/11/01 07:22

編集2021/11/01 08:16

php ImageMagickでサーバー上の画像ファイルを一括圧縮をかけてます。
ディレクトリ内の画像ファイルの中に破損ファイルがあると以下のようなエラーが表示されます。
破損したファイルは無視して処理をしたいです。

■エラー
Fatal error: Uncaught ImagickException: insufficient image data in file `./hoge/hoge.jpg' @ error/jpeg.c/ReadJPEGImage/1156 in /home/hoge/public_html/imagick.php:15 Stack trace: #0 /home/hoge/public_html/imagick.php(15): Imagick->__construct(Array) #1 {main} thrown in /home/hoge/public_html/imagick.php on line 15

<?php //元画像のパス $dirName = './hoge/'; $imagePath = glob($dirName.'*.jpg'); //インスタンスを生成 $images = new Imagick($imagePath); foreach($images as $image) { $image->setImageCompressionQuality(60); $image->writeImage(); } ?>

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2021/11/01 07:28

どうすればいい?ではなく、どうしたいかを決めるのは質問者さんです 無視したいのか、破損ファイルを削除したいのか、リネームして保存しておきたいのか
komurojun

2021/11/01 08:16

申し訳ございません。 破損したファイルは無視して処理をしたいです。
yambejp

2021/11/01 09:41

ファイルは上書きするのでしょうか? サムネイルでも作って別名で保存するのかと思ったのですが・・・ 上書きだと新たなファイルが追加されるたびに全部上書き処理が走りませんか? あまりおすすめできませんが・・・
komurojun

2021/11/01 09:47 編集

ありがとうございます。 処理は、既存ファイル一回だけ行いたいと思ってます。 新たに追加されるファイルに関しては、対象外になります。
komurojun

2021/11/01 09:46

ファイルは、既存のファイルを上書きするようにしたいです。
guest

回答1

0

ベストアンサー

PHP7以降であればFatal errorはtry-catchできます

無条件に上書きするとファイルが全滅する可能性がありますので
バックアップをとるなど計画的に処理してください

php

1$im=new Imagick() 2foreach(glob($dirName.'*.jpg') as $image) { 3 try{ 4 $im->readImage($image); 5 $im->setImageCompressionQuality(60); 6 //$im->writeImage(); 7 }catch(Throwable $t){ 8 print $t->getMessage(); 9 } 10}

※テストしてないので環境にあわせてうまく読み替えてみてください

投稿2021/11/01 10:05

編集2021/11/01 10:11
yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

komurojun

2021/11/01 11:02

ありがとうございます。無事に圧縮する事が出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問