PHPのGDだけで画像に波の効果を加える
2019-07-08 php
imagemagickを使えば簡単なんだけど、PHPのGDしか使えない環境だったので、いろいろ調べて以下コードで実現した。
<?php
/**
* @param resource $img imagecreatefromjpeg等の画像リソース
* @param int $width 変換させる幅
* @param int $height 変換させる高さ
* @param int $period 周期の大きさ(1~)
* @param int $amplitude 振幅の大きさ(1~)
* @return resource
*/
function imageWave($img, $width, $height, $period = 10, $amplitude = 5) {
$p = $period * rand(1, 3);
$k = mt_rand(0, 100);
for ($i = 0; $i<$width; $i++) {
imagecopy($img, $img, $i-1, sin($k+$i/$p) * $amplitude, $i, 0, 1, $height);
}
$k = mt_rand(0,100);
for ($i = 0; $i<$height; $i++) {
imagecopy($img, $img, sin($k+$i/$p) * $amplitude, $i-1, 0, $i, $width, 1);
}
return $img;
}
// 使い方
$img = imagecreatefromjpeg("test.jpg");
$img = imageWave($img, imagesx($img), imagesy($img), 10, 10);
imagejpeg($img, "out.jpg");
実際に変換してみた。

↑元画像、↓変換後画像。いい感じ。

≪ 2019-07-09
nanaco っているのか
2019-07-08 ≫
スタジオ、ランチパック、震える舌