前提・実現したいこと
phpでimagickを使ってicc(画像プロファイル)を残しながらExifを削除したいです。
画像プロファイルは(sRGB , AdobeRGBなど)になります。
imagickでiccを残しながらExifを消去する方法は下記のページを見つけましたので、この情報を参考にプログラムを作成してみました。
https://ja.coder.work/so/php/275146
[環境]
CentOS7.7 / php7.3.18 / ImageMagick 7.0.10 / Imagick 3.4.4
手順としてはEXIFを消す前にICC情報を取得
$profiles = $imagick->getImageProfiles("icc", true);
EXIFを消去
$imagick->stripImage();
ICC情報を戻す
$imagick->profileImage("icc", $profiles['icc']);
ファイルに情報を書き込み
$imagick->writeImage($filename);
となっているようですが、実行してみるとEXIF情報は消えて、ICC情報も消えてしまっています。
どのようにすればICCが消えないようにEXIFを消去できるか教えていただければと思います。よろしくお願いします。
実験した内容
$tempfile = $_FILES['userfile']['tmp_name']; $filepath = '/var/www/html/sample/img/photos/' . $_FILES['userfile']['name']; if (is_uploaded_file($tempfile)) { if (move_uploaded_file($tempfile, $filepath)) { echo $filepath . "をアップロードしました。"; //imagickによるExif削除(iccを残す) $imagick = new Imagick($filepath); print_r($imagick); //imagickでiccを取り出す $profiles = $imagick->getImageProfiles("icc", true); print_r($profiles); //下記のようにsRGBのデータは入ってるのが確認できる。 //Array([icc] => HLinomntrRGB XYZ � 1acspMSFTIEC sRGB���-HP) //imagickでExifデータを消す $imagick->stripImage(); //imagickでiccを戻す if (!empty($profiles)) $imagick->profileImage("icc", $profiles['icc']); //imagickで画像ファイルにデータを書き込む $imagick->writeImage($filepath); } else { echo "ファイルをアップロードできません。"; } } else { echo "ファイルが選択されていません。"; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/26 04:48
2020/05/26 06:23 編集
2020/05/26 08:58
2020/05/26 09:18