0

次の画像があります: http://i.stack.imgur.com/mM8cY.png

私がやりたいのは、Photoshop のような「カラー オーバーレイ」効果を作成することです。各白ピクセルを 0 ~ 255 の範囲の RGB 数値で指定された値に変更できるコードが必要です。ImageMagick クラスのことは聞いたことがありますが、どこにも見つからず、そのクラスでもどうすればよいかわかりません。現在 で試してimagefilterいますが、白い画像では機能しません。これが私の現在のコードです:

<?php
$match = array();
if (isset($_GET['c']) && preg_match('/^#?(?:[A-Fa-f0-9]{2}){3}$/',$_GET['c'],$match)){
    $match = str_split($match[0],2);
    foreach ($match as $k=>$m){ $match[$k] = intval($match[$k],16); }

    $img = imageCreateFromPng('splat.png');
    $background = imagecolorallocate($img, 0, 0, 0);
    imagecolortransparent($img, $background);
    imagealphablending($img, false);
    imagesavealpha($img, true);

    //Transformation code
    imagefilter($img, IMG_FILTER_COLORIZE, $match[0], $match[1], $match[2]);

    header('Content-type: image/png');
    imagePng($img);
    exit;
}
?>
4

1 に答える 1

0

解決策を見つけました。Photoshop を使用して、画像に赤色のオーバーレイを追加しただけなので、次のようになります。http://i.stack.imgur.com/mVARN.png

次に、次の PHP コードを使用します。

<?php
$match = array();
$color = isset($_GET['c']) ? $_GET['c'] : false;
if ($color === false) isset($_GET['color']) ? $_GET['color'] : false;
$color = preg_replace('/^#/','',$color);
if (strlen($color) == 3) $color = $color[0].$color[0].$color[1].$color[1].$color[2].$color[2];
if (preg_match('/^(?:[A-Fa-f0-9]{2}){3}$/',$color,$match)){
    $match = str_split($match[0],2);
    foreach ($match as $k=>$m){ $match[$k] = intval($match[$k],16); }

    // Load image
    $img = imageCreateFromPng('splat.png');
    $background = imagecolorallocate($img, 0, 0, 0);
    imagecolortransparent($img, $background);
    imagealphablending($img, false);
    imagesavealpha($img, true);

    imagefilter($img, IMG_FILTER_COLORIZE, intval( intval($match[0],16) - 255 ,16), $match[1], $match[2]);

    header('Content-type: image/png');
    imagePng($img);
    exit;
}
?>

ここで重要なのは、次のように入力から 255 の赤色の値を差し引いたことです。

intval( intval($match[0],16) - 255 ,16)

そしてそれは適切に色を変えました。

于 2013-07-31T19:08:20.227 に答える