私はPythonアプリケーションをPHPに移植するように求められました(そして私はPHPがあまり好きではありません)。PILのImage.pasteに対応するPHP
ポートに問題がある部分は、Map Icons CollectionでNicolas Molletという素晴らしい単色の「テンプレート」画像を使用しています。これらのテンプレートイメージは、カスタム背景と前景色を持つアイコンを作成するために使用されます。 PILのImage.pasteは、テンプレートImageをアルファマスクとして使用して、アイコンの前景を選択した色で「貼り付ける」ために使用されます。たとえば、次のように私はPHPでこれを複製することができますどのように
?それをピクセル単位で行う他に何か別の選択肢がありますか?
私がこれまで持っているもの[更新]
私はPHPのスキルを誇りに思っていないよ...:
<?php
header('Content-type: image/png');
// read parameters: icon file, foreground and background colors
$bgc = sscanf(empty($_GET['bg']) ? 'FFFFFF' : $_GET['bg'], '%2x%2x%2x');
$fgc = sscanf(empty($_GET['fg']) ? '000000' : $_GET['fg'], '%2x%2x%2x');
$icon = empty($_GET['icon']) ? 'base.png' : $_GET['icon'];
// read image information from template files
$shadow = imagecreatefrompng("../static/img/marker/shadow.png");
$bg = imagecreatefrompng("../static/img/marker/bg.png");
$fg = imagecreatefrompng("../static/img/marker/" . $icon);
$base = imagecreatefrompng("../static/img/marker/base.png");
imagesavealpha($base, true); // for the "shadow"
// loop over every pixel
for($x=0; $x<imagesx($base); $x++) {
for($y=0; $y<imagesy($base); $y++) {
$color = imagecolorsforindex($bg, imagecolorat($bg, $x, $y));
// templates are grayscale, any channel serves as alpha
$alpha = ($color['red'] >> 1)^127; // 127=transparent, 0=opaque.
if($alpha != 127) { // if not 100% transparent
imagesetpixel($base, $x, $y, imagecolorallocatealpha($base, $bgc[0], $bgc[1], $bgc[2], $alpha));
}
// repeat for foreground and shadow with foreground color
foreach(array($shadow, $fg) as $im) {
$color = imagecolorsforindex($im, imagecolorat($im, $x, $y));
$alpha = ($color['red'] >> 1)^127;
if($alpha != 127) {
imagesetpixel($base, $x, $y, imagecolorallocatealpha($base, $fgc[0], $fgc[1], $fgc[2], $alpha));
}
}
}
}
// spit image
imagepng($base);
// destroy resources
foreach(array($shadow, $fg, $base, $bg) as $im) {
imagedestroy($im);
}
?>
それが働いていると、パフォーマンスが悪いわけではありません。
PHP開発者にあなたの言語が気に入らないと言っている間に助けてもらうのが賢明かどうかわからない – halfer
これらがPNG画像の場合、GD2がこれを行えない場合、ImageMagickは良い方法です。 – halfer
@halfer:彼らはPythonを嫌うのは無料です:-) –