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

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

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

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

imagick

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

Q&A

解決済

1回答

2926閲覧

PHPとimagickで画像プロファイル(icc)を残して他のExif情報を削除したい

prgsd

総合スコア7

PHP

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

imagick

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

0グッド

0クリップ

投稿2020/05/25 22:35

前提・実現したいこと

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 "ファイルが選択されていません。"; }

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記に類似の問題がありました。
https://www.php.net/manual/ja/imagick.profileimage.php#114781

以下のコマンドの実行結果を確認してみてください。

$ convert -list configure | grep DELEGATES

自分の環境だと、以下のように lcms が含まれてまして、サンプルプログラムを実行するとiccのみ残ることが確認できました。

$ convert -list configure | grep DELEGATES DELEGATES bzlib djvu mpeg fftw fontconfig freetype jbig jng jpeg lcms lqr lzma openexr pango png ps tiff wmf x xml zlib

サンプルプログラム

<?php $path = './cmyk.jpg'; $outpath = './output.jpg'; $img = new \Imagick($path); $profiles = $img->getImageProfiles("*", true); // 全プロパティ取得 print_r(array_keys($profiles)); $img->stripImage(); $img->profileImage("icc", $profiles['icc']); $img->writeImage($outpath); $outimg = new \Imagick($outpath); print_r(array_keys($outimg->getImageProfiles("*", true)));

実行結果(iccのみ残る)

Array ( [0] => exif [1] => icc ) Array ( [0] => icc )

ImageMagickのバージョン等が違うので、そこ起因かもしれませんが確認してみてください。

投稿2020/05/26 01:51

tdomy

総合スコア20

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

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

prgsd

2020/05/26 04:48

tdomyさん  ご回答ありがとうございます。助かります。 convert -list configure | grep DELEGATES を実行してみたところlcmsが入っていない状態でした。」 教えていただいた https://www.php.net/manual/ja/imagick.profileimage.php#114781 からlcmsは下記ページにソースが有ることがわかりました。 http://www.littlecms.com/ ここからファイルをダウンロードしてインストール後 imagickを再コンパイルするという情報があったのですが、どのようにインストールすればよいかご存知でしたら教えていただければと思います。yumでのインストールはわかりますが、個別のパッケージのインストールは詳しくありません。 下記のページでいくつかのインストール方法が記載されていますが、今回の場合どれを採用したら良いのか判断できません。 [Linuxへのソフトのインストール方法] http://note.kurodigi.com/post-0-15/ お手数をおかけしますが、よろしくお願いいたします。
tdomy

2020/05/26 06:23 編集

lcmsはyumでインストールすれば良いかと思います。 ``` # yum install lcms2-devel lcms2-utils lcms2 ``` その後のImageMagickの再コンパイルに関しては、最初にインストールした際の方法がわからないので何とも言えないです。。。
prgsd

2020/05/26 08:58

tdomyさん ご回答ありがとうございました。 yumでlcmsをインストールしましたら、うまく動きました。 特にImageMagickの再コンパイルなどは必要ありませんでした。 lcmsが入っていなかったのでうまくいかなかったのですね。 数日、いろいろと実験してみましたがうまくいかず困っておりました。 とてもわかりやすい説明をして頂き、ありがとうございました。 今後ともよろしくお願いします。
tdomy

2020/05/26 09:18

> 特にImageMagickの再コンパイルなどは必要ありませんでした。 おそらくyum側で依存解決されたのでしょうね。 無事に解決したようで良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問