色、形、透明度などの引数をとり、PNG画像を出力するPHPで小さな関数を作成したい。 PHP GDライブラリについて聞いたことがありますが、soon.media.mit.edu動的PNG画像を作成する
答えて
This is a good exampleのように創造的なものを作るには、these functionsを使って事実上すべてを行うことができます。可能であれば、記述したようなイメージを作成することは、グラデーション、ループ、色付きの奇妙なものを作成することによってかなり難しくなります。
いくつかのパラメータに基づいてイメージを動的に作成したい場合は、Photoshopで事前にイメージを作成してから、ユーザーが選択したイメージに基づいてオーバーレイすることができます。
あなたが楽しめることがたくさんあります。
編集:ああ、あなたの興味がある場合は、画像を作成し、エラーの原因となるgiving an invalid parameter shows some of the python codeです。コードのアイデアを得るのは良い場所です。
第2編集:これは私がこの種の技術で行ったことです。かなり前のことだったことに気をつけてください。それは、クエリ文字列に基づいて名前を受け取り、基本的に多くの乱数を持ついくつかのループを行います。
ここにソースコードがありますが、私は愚かなコード/引用についてお詫び申し上げます。これはかなり前に書かれました。私が約14歳になったとき(おそらく多くの欠陥)です。
<?php
header("Content-type:image/jpeg");
$array=array("I am a monument to all your sins", "Currently making pizza","Best before 12/7/09", "Farming Onions");
function imagettftext_cr(&$im, $size, $angle, $x, $y, $color, $fontfile, $text)
{
// retrieve boundingbox
$bbox = imagettfbbox($size, $angle, $fontfile, $text);
// calculate deviation
$dx = ($bbox[2]-$bbox[0])/2.0 - ($bbox[2]-$bbox[4])/2.0; // deviation left-right
$dy = ($bbox[3]-$bbox[1])/2.0 + ($bbox[7]-$bbox[1])/2.0; // deviation top-bottom
// new pivotpoint
$px = $x-$dx;
$py = $y-$dy;
return imagettftext($im, $size, $angle, $px, $y, $color, $fontfile, $text);
}
$image = imagecreate(500,90);
$black = imagecolorallocate($image,0,0,0);
$grey_shade = imagecolorallocate($image,40,40,40);
$white = imagecolorallocate($image,255,255,255);
$text = $array[rand(0,sizeof($array)-1)];
// Local font files, relative to script
$otherFont = 'army1.ttf';
$font = 'army.ttf';
if($_GET['name'] == ""){ $name = "Sam152";}else{$name= $_GET['name'];}
$name = substr($name, 0, 25);
//BG text for Name
while($i<10){
imagettftext_cr($image,rand(2,40),rand(0,50),rand(10,500),rand(0,200),$grey_shade,$font,$name);
$i++;
}
//BG text for saying
while($i<10){
imagettftext_cr($image,rand(0,40),rand(90,180),rand(100,500),rand(200,500),$grey_shade,$otherFont,$text);
$i++;
}
// Main Text
imagettftext_cr($image,35,0,250,46,$white,$font,$name);
imagettftext_cr($image,10,0,250,76,$white,$otherFont,$text);
imagejpeg($image);
?>
ここでは、クエリ文字列パラメータから受け入れられる2つの名前を持つイメージを生成するために以前に使用したコードを示します。私は準備された背景イメージを使用し、その上に名前を付けます。
<?php
// Print two names on the picture, which accepted by query string parameters.
$n1 = $_GET['n1'];
$n2 = $_GET['n2'];
Header ("Content-type: image/jpeg");
$image = imageCreateFromJPEG("images/someimage.jpg");
$color = ImageColorAllocate($image, 255, 255, 255);
// Calculate horizontal alignment for the names.
$BoundingBox1 = imagettfbbox(13, 0, 'ITCKRIST.TTF', $n1);
$boyX = ceil((125 - $BoundingBox1[2])/2); // lower left X coordinate for text
$BoundingBox2 = imagettfbbox(13, 0, 'ITCKRIST.TTF', $n2);
$girlX = ceil((107 - $BoundingBox2[2])/2); // lower left X coordinate for text
// Write names.
imagettftext($image, 13, 0, $boyX+25, 92, $color, 'ITCKRIST.TTF', $n1);
imagettftext($image, 13, 0, $girlX+310, 92, $color, 'ITCKRIST.TTF', $n2);
// Return output.
ImageJPEG($image, NULL, 93);
ImageDestroy($image);
?>
は、あなたがこのような何かをページ上で生成された画像を表示するには:
<img src="myDynamicImage.php?n1=bebe&n2=jake" />
これを行う方法を覚えておくのに必要なことは、まさに私が見たいものでした。 +1 – ThisBoyPerforms
ない「PHPでそれをやって、」しかし、あなたはいくつかの強力なコマンドラインのソフトウェアを呼び出すことができますへの直接の回答 PHP。特にImageMagickはキッチンシンクを含むすべてを引き出します。また、「帯域外」処理(すなわち、要求が完了した後に画像処理を実行する(ユーザーのフィードバックが速い)、または夜遅くにリソースが逼迫しているバッチで画像処理を実行するための「バックエンド」スクリプトで利用できるという利点がありますピーク時。
あなたが探しているのは完全ではありませんが、ダイナミックカラーレイヤーを透明な画像に挿入するためのスクリプトをまとめました.1色の画像「レイヤー」を設定し、 。。それ進カラーコードあなたのレイヤースクリプトの再色とは、ここで提示するように、1枚の画像にそれらをマージするコードです。うまくいけば、あなたはそれのうち、いくつかの使用を得ることができます
function hexLighter($hex, $factor = 30) {
$new_hex = '';
$base['R'] = hexdec($hex{0}.$hex{1});
$base['G'] = hexdec($hex{2}.$hex{3});
$base['B'] = hexdec($hex{4}.$hex{5});
foreach ($base as $k => $v) {
$amount = 255 - $v;
$amount = $amount/100;
$amount = round($amount * $factor);
$new_decimal = $v + $amount;
$new_hex_component = dechex($new_decimal);
$new_hex .= sprintf('%02.2s', $new_hex_component);
}
return $new_hex;
}
// Sanitize/Validate provided color variable
if (!isset($_GET['color']) || strlen($_GET['color']) != 6) {
header($_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400);
exit(0);
}
if (file_exists("cache/{$_GET['color']}.png")) {
header('Content-Type: image/png');
readfile("cache/{$_GET['color']}.png");
exit(0);
}
// Desired final size of image
$n_width = 50;
$n_height = 50;
// Actual size of source images
$width = 125;
$height = 125;
$image = imagecreatetruecolor($width, $height);
imagesavealpha($image, true);
imagealphablending($image, false);
$n_image = imagecreatetruecolor($n_width, $n_height);
imagesavealpha($n_image, true);
imagealphablending($n_image, false);
$black = imagecolorallocate($image, 0, 0, 0);
$transparent = imagecolorallocatealpha($image, 255, 255, 255, 127);
imagefilledrectangle($image, 0, 0, $width, $height, $transparent);
$layers = array();
$layers_processed = array();
$layers[] = array('src' => 'layer01.gif', 'level' => 0); // Border
$layers[] = array('src' => 'layer02.gif', 'level' => 35); // Background
$layers[] = array('src' => 'layer03.gif', 'level' => 100); // White Quotes
foreach ($layers as $idx => $layer) {
$img = imagecreatefromgif($layer['src']);
$processed = imagecreatetruecolor($width, $height);
imagesavealpha($processed, true);
imagealphablending($processed, false);
imagefilledrectangle($processed, 0, 0, $width, $height, $transparent);
$color = hexLighter($_GET['color'], $layer['level']);
$color = imagecolorallocate($image,
hexdec($color{0} . $color{1}),
hexdec($color{2} . $color{3}),
hexdec($color{4} . $color{5})
);
for ($x = 0; $x < $width; $x++)
for ($y = 0; $y < $height; $y++)
if ($black === imagecolorat($img, $x, $y))
imagesetpixel($processed, $x, $y, $color);
imagecolortransparent($processed, $transparent);
imagealphablending($processed, true);
array_push($layers_processed, $processed);
imagedestroy($img);
}
foreach ($layers_processed as $processed) {
imagecopymerge($image, $processed, 0, 0, 0, 0, $width, $height, 100);
imagedestroy($processed);
}
imagealphablending($image, true);
imagecopyresampled($n_image, $image, 0, 0, 0, 0, $n_width, $n_height, $width, $height);
imagealphablending($n_image, true);
header('Content-Type: image/png');
imagepng($n_image, "cache/{$_GET['color']}.png");
imagepng($n_image);
// Free up memory
imagedestroy($n_image);
imagedestroy($image);
あなたはそれについての詳細な情報が必要な場合。コード、私は詳細なexplaを持っている私のblogの侵入。ここ
は簡単な例である:ここでは
<?php
$your_text = "Helloooo Worldddd";
$IMG = imagecreate(250, 80);
$background = imagecolorallocate($IMG, 0,0,255);
$text_color = imagecolorallocate($IMG, 255,255,0);
$line_color = imagecolorallocate($IMG, 128,255,0);
imagestring($IMG, 10, 1, 25, $your_text, $text_color);
imagesetthickness ($IMG, 5);
imageline($IMG, 30, 45, 165, 45, $line_color);
header("Content-type: image/png");
imagepng($IMG);
imagecolordeallocate($IMG, $line_color);
imagecolordeallocate($IMG, $text_color);
imagecolordeallocate($IMG, $background);
imagedestroy($IMG);
exit;
?>
は、ダイナミックテキストでダイナミックなPNGイメージを作成するために私の関数であります... そして、ここで
<img src="create_image.php?s=008080_F_1000_200&t=Sample%20Image%20Drawn%20By%20PHP" alt="GD Library Example Image" >
AS-呼び出すことができますが、要求された画像を提供create_image.phpです...ここで
<?php
$setting = isset($_GET['s']) ? $_GET['s'] : "FFF_111_100_100";
$setting = explode("_",$setting);
$img = array();
switch ($n = count($setting)) {
case $n > 4 :
case 3:
$setting[3] = $setting[2];
case 4:
$img['width'] = (int) $setting[2];
$img['height'] = (int) $setting[3];
case 2:
$img['color'] = $setting[1];
$img['background'] = $setting[0];
break;
default:
list($img['background'],$img['color'],$img['width'],$img['height']) = array('F','0',100,100);
break;
}
$background = explode(",",hex2rgb($img['background']));
$color = explode(",",hex2rgb($img['color']));
$width = empty($img['width']) ? 100 : $img['width'];
$height = empty($img['height']) ? 100 : $img['height'];
$string = (string) isset($_GET['t']) ? $_GET['t'] : $width ."x". $height;
header("Content-Type: image/png");
$image = @imagecreate($width, $height)
or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($image, $background[0], $background[1], $background[2]);
$text_color = imagecolorallocate($image, $color[0], $color[1], $color[2]);
imagestring($image, 5, 5, 5, $string, $text_color);
imagepng($image);
imagedestroy($image);
function hex2rgb($hex) {
// Copied
$hex = str_replace("#", "", $hex);
switch (strlen($hex)) {
case 1:
$hex = $hex.$hex;
case 2:
$r = hexdec($hex);
$g = hexdec($hex);
$b = hexdec($hex);
break;
case 3:
$r = hexdec(substr($hex,0,1).substr($hex,0,1));
$g = hexdec(substr($hex,1,1).substr($hex,1,1));
$b = hexdec(substr($hex,2,1).substr($hex,2,1));
break;
default:
$r = hexdec(substr($hex,0,2));
$g = hexdec(substr($hex,2,2));
$b = hexdec(substr($hex,4,2));
break;
}
$rgb = array($r, $g, $b);
return implode(",", $rgb);
}
は、使用する簡単な例です:ダウン
<?php
$your_text = "Helloooo Worldddd";
$IMG = imagecreate(250, 80);
$background = imagecolorallocate($IMG, 0,0,255);
$text_color = imagecolorallocate($IMG, 255,255,0);
$line_color = imagecolorallocate($IMG, 128,255,0);
imagestring($IMG, 10, 1, 25, $your_text, $text_color);
imagesetthickness ($IMG, 5);
imageline($IMG, 30, 45, 165, 45, $line_color);
header("Content-type: image/png");
imagepng($IMG);
imagecolordeallocate($IMG, $line_color);
imagecolordeallocate($IMG, $text_color);
imagecolordeallocate($IMG, $background);
imagedestroy($IMG);
exit;
?>
- 1. サムネイルpng、jpg、gif画像の作成
- 2. 再作成PNG画像は、黒
- 3. LWJGL3 STB画像アルファチャンネルがPNGで動作しない画像
- 4. png画像からTFRecordsファイルを作成する方法
- 5. バイトのみのPNG画像を作成する方法
- 6. JavaScriptでDIVの画像を作成する(GIF/PNG)
- 7. 複数の画像とラベルからpngファイルを作成する
- 8. ggplot to png - 自動的に画像を伸ばします
- 9. 既存のPNG画像と同じXMODEM-CRCを持つPNG画像を作成します。
- 10. Ubuntuの複数の画像にPNGを埋め込んで画像を作成
- 11. ライブラリからの画像の動的インスタンスを作成する
- 12. AppEngineで画像を動的に作成するには
- 13. Pythonで動的画像スライドショーを作成する
- 14. タイル画像からAnimationDrawableを動的に作成する方法
- 15. ワードプレスを画像名から自動的に作成する
- 16. 可逆PNG画像を作成していますか?
- 17. WSGIでファイルを作成せずに動的画像を作成する
- 18. 同じ解像度でPDFをPNGに変換する - 画像作成
- 19. Java:BufferedImageから動的にpngイメージを作成する
- 20. RTL - android:autoMirroredはpng画像で動作しますか?
- 21. アンドロイド表示に入れる画像を動的に作成/描画する
- 22. FFMPEGで600 pngの画像から20秒のビデオを作成
- 23. 他のPNGでPNG画像をペイント
- 24. Mozilla Open Badges .png PHPでの画像作成
- 25. WebPACKのPNG画像
- 26. グレースケールのPNG画像
- 27. PNG画像は、IE
- 28. イメージを.pngで作成する.pngイメージを作成する
- 29. Pythonで画像ヒストグラムを手動で効率的に作成
- 30. 画像ビュー、ラベル、ボタンを動的に再作成
リンク.......... – Pacerier
@Pacerierこのような感じでした(https://web.archive.org/web/20090720063343/http://soon.media.mit.edu/masthead/images/hdr -research-landing.jpg)、色、テキスト、透明度が変化します提供されているパラメータが保留になっています。今、私たちは曇りやイグジットのようなサービスを持っていますが、それは新しいものでした! – apnerve