サーバーサイドでの画像処理は、ImageMagick を使ってましたが、脆弱性があり、使用回避することになり、PHP GD の利用に置換予定です。
[ ImageMagick 脆弱性情報 ]
https://www.mbsd.jp/blog/20180831.html
https://qiita.com/yoya/items/2076c1f5137d4041e3aa
https://blog.cybozu.io/entry/2018/08/21/080000[
[ 準備 ]
CentOS7の yum でインストールした7系では、何もしなくても GDライブラリが使えます。
Windows の場合、php.ini に以下の記述を追加して有効化します。
[PHP_GD2] extension=php_gd2.dll
[ コード例 ]
<?php
/**
* GD 画像灰色セピア変換
* argv : 1 : ソースファイル名, 2 : デストファイル名, 3 : セピア or Not
*/
// 引数取得 //
$srcfnm = $argv[1];
$dstfnm = $argv[2];
$flgsepia = $argv[3];
// 画像タイプ取得 //
list($src_width, $src_height, $type) = getimagesize($srcfnm);
switch ($type) {
case IMAGETYPE_JPEG: // 2
$im = imagecreatefromjpeg($srcfnm);
break;
case IMAGETYPE_PNG: // 3
$im = imagecreatefrompng($srcfnm);
break;
case IMAGETYPE_GIF: // 1
$im = imagecreatefromgif($srcfnm);
break;
}
// 変換して保存 //
$res = 1;
//if ($im && imagefilter($im, IMG_FILTER_GRAYSCALE)) {
if ($im) {
// セピア //
if ($flgsepia == 1) {
//imagefilter($im, IMG_FILTER_COLORIZE, 255, 50, 50);
//imagefilter($im, IMG_FILTER_COLORIZE, 100, 0, 0);
//imagefilter($im, IMG_FILTER_COLORIZE, 255, 0, 0);
//imagefilter($im, IMG_FILTER_COLORIZE, 128, 50, 50);
imagefilter($im, IMG_FILTER_GRAYSCALE);
imagefilter($im, IMG_FILTER_COLORIZE, 100, 50, 0);
// https://www.phpied.com/image-fun-with-php-part-2/ これを真似る
}
// 白黒 //
else {
imagefilter($im, IMG_FILTER_GRAYSCALE);
}
if ($type == IMAGETYPE_JPEG) {
imagejpeg($im, $dstfnm);
}
else if ($type == IMAGETYPE_PNG) {
imagepng($im, $dstfnm);
}
else {
imagegif($im, $dstfnm);
}
}
else {
$res = 0;
}
imagedestroy($im);
// 連想配列に格納 //
$responce = [];
$responce["Sepia"] = (int)$flgsepia;
$responce["Result"] = $res;
// JSONに変換して出力 //
echo json_encode($responce, JSON_PRETTY_PRINT);
?>
セピア変換はここで教えていただきました : https://www.phpied.com/image-fun-with-php-part-2/
マニュアル : https://php.plus-server.net/function.imagefilter.html
|