画像の各画素(ピクセル)に対して、フィルターとなる配列を用いた「畳み込み演算」(コンボリューション)を行うことで、様々な画像処理を実現できます。
PHP(5.1以上)の場合は、imageconvolution関数でたたみ込み演算を行うことができます。
<?php $image = imagecreatefromjpeg( 'src.jpg' ); $filter = array( array( 0.0, -1.0, 0.0 ), array( -1.0, 5.5, -1.0 ), array( 0.0, -1.0, 0.0 ) ); $div = array_sum( array_map( 'array_sum', $filter )); imageconvolution( $image, $filter, $div, 0 ); imagejpeg( $image, 'out.jpg' ); imagedestroy( $image ); ?>
具体的には、上記のようなコードで、「src.jpg」にフィルター処理を加えた画像を「out.jpg」として生成できます。
そして、$filter(3×3配列)の値を変更することで、色々な効果が得られます。
以下にいくつかのサンプルを載せてみますので、何かの参考になれば幸いです。
元画像
画像処理の例
サンプル1
$filter = array( array( 0.0, -1.0, 0.0 ), array( -1.0, 5.5, -1.0 ), array( 0.0, -1.0, 0.0 ) );
サンプル2
$filter = array( array( 2.0, 2.0, 2.0 ), array( 2.0, 0.0, 2.0 ), array( 2.0, 2.0, 2.0 ) );
サンプル3
$filter = array( array( -2.0, -1.0, 0.0 ), array( -1.0, 1.0, 1.0 ), array( 0.0, 1.0, 2.0 ) );
サンプル4
$filter = array( array( -1.0, -1.0, -1.0 ), array( -1.0, 8.0, -1.0 ), array( -1.0, -1.0, -1.0 ) );