PHP GD で画像変換 (回転)

サーバーサイドでの画像処理は、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 : 角度
 */
// 引数取得 //
$srcfnm = $argv[1];
$dstfnm = $argv[2];
$degree = $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) {
  // 回転 //
  //$degree = $degree * -1;
  $rotate = imagerotate($im, $degree * -1, 0);   // 0 は余白色
  // 保存 //
  if ($type == IMAGETYPE_JPEG) {
    imagejpeg($rotate, $dstfnm);
  }
  else if ($type == IMAGETYPE_PNG) {
    imagepng($rotate, $dstfnm);
  }
  else {
    imagegif($rotate, $dstfnm);
  }
}
else {
  $res = 0;
}

// メモリの開放 //
imagedestroy($im);
imagedestroy($rotate);

// 連想配列に格納 //
$responce = [];
$responce["Degree"] = (int)$degree;
$responce["Result"] = $res;

// 処理結果をJSONに変換して出力 //
echo json_encode($responce, JSON_PRETTY_PRINT);

?>


PHP GD で画像変換 (白黒 セピア)

サーバーサイドでの画像処理は、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/

http://kyasper.com/php-tips/

マニュアル : https://php.plus-server.net/function.imagefilter.html

夏目漱石 : 芸術

あらゆる芸術の士は、人の世をのどかにし、人の心を豊かにするがゆえに尊い。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

坊っちゃん改版 (新潮文庫) [ 夏目漱石 ]
価格:341円(税込、送料無料) (2023/2/9時点)

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

明暗改版 (新潮文庫) [ 夏目漱石 ]
価格:825円(税込、送料無料) (2023/2/9時点)

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

こころ改版 (新潮文庫) [ 夏目漱石 ]
価格:407円(税込、送料無料) (2023/2/9時点)

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

夢十夜/草枕 (集英社文庫) [ 夏目漱石 ]
価格:440円(税込、送料無料) (2023/2/9時点)

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

それから (角川文庫) [ 夏目 漱石 ]
価格:440円(税込、送料無料) (2023/2/9時点)

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

夏目漱石の世界 (別冊太陽)
価格:2640円(税込、送料無料) (2023/2/9時点)