• 締切済み

ジェネレーターの作り方

http://bzmm.jp/hs_gene/ http://vllv.us/CGI/yugioh/ 上のようなジェネレーターが作りたいです。 やりたいこと 1.テキストボックスに文字を入れ、その文字が入った画像を作成する。 2.画像に入れる文字のフォントを指定できるようにする。 3.(下の遊戯王ジェネレーターのように)画像を選択し、その画像を自動で大きさを変えて貼り付ける。 4.作成した画像をtwitterに投稿できるようにする。 (この時、twitterの画像として貼り付けるのではなく別ページを開いてそこに画像が貼ってある形にしたい) 検索しても方法がわからないので方法を教えてください。

みんなの回答

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.2

以下の HTML ファイルを Web サーバーに配置するだけで実現可能です <script>addEventListener('DOMContentLoaded',function(ev){ _=0; function subs(f){return [].slice.call(arguments,1).reduce(function(s,v){return s.replace(/%/,v)}, f)} function range(n){return Array.apply(null,new Array(n)).map(function(v,i){return i})} function drawVision(name, role, font, imga) { var pane = document.getElementById('vision'); var CX = pane.width/2, CY = pane.height/2; var R = Math.sqrt(pane.width*pane.width + pane.height*pane.height) / 2 - 5; var M = R/10; var PW = pane.width - M*2|0, PH = pane.height - M*2|0; var ctx = pane.getContext('2d'); ctx.clearRect(0,0, pane.width,pane.height); // 枠 var points = range(18).map(function(i){return Math.PI*i/9}).map(function(s){return [CX+R*Math.sin(s), CY-R*Math.cos(s)]}); ctx.beginPath(); points.forEach(function(p){points.forEach(function(q){ctx.moveTo(p[0],p[1]),ctx.lineTo(q[0],q[1])})}); ctx.shadowBlur = 0; ctx.lineWidth = 1; ctx.strokeStyle = 'navy'; ctx.stroke(); // 角丸箱 function plotRoundBox(x,y, w,h, r) { var s = Math.PI/2; ctx.beginPath(); ctx.arc(x+w-r, y+h-r, r, s*0, s*1, false); ctx.arc(x+0+r, y+h-r, r, s*1, s*2, false); ctx.arc(x+0+r, y+0+r, r, s*2, s*3, false); ctx.arc(x+w-r, y+0+r, r, s*3, s*4, false); ctx.closePath(); return ctx; } ctx.fillStyle = 'white'; ctx.shadowBlur = M; ctx.shadowColor = 'navy'; plotRoundBox(M,M, PW,PH, M/2).fill(); ctx.shadowBlur = 0; // テロップ function plotTelop(){ var x = CX, y = M + PH - M, yy = y - M*1.5, w = PW - M; var fx = ((font.indexOf(' ') >= 0)? subs('"%"', font): font) + ',serif'; ctx.fillStyle = 'white'; ctx.strokeStyle = 'rgba(0,0,0,0.7)'; ctx.lineWidth = 2; ctx.shadowBlur = 10; ctx.shadowColor = 'black'; ctx.textAlign = 'center'; ctx.textBaseline = 'ideographic'; if (role) { ctx.font = subs('%px %', M/2, fx); ctx.strokeText(role, x,yy, w); ctx.fillText(role, x,yy, w); } if (name) { ctx.font = subs('%px %', M, fx); ctx.strokeText(name, x,y, w); ctx.fillText(name, x,y, w); } ctx.shadowBlur = 0; } // 画像 if (imga) { var img = new Image(); img.src = imga; img.onload = function(){ var iw = img.width, ih = img.height; var zw = PW/iw, zh = PH/ih; var sx = 0, sy = 0, sw = iw, sh = ih; if (zw < zh) { sx = (iw-PW/PH*ih)/2|0, sw = PW/PH*ih; } if (zw > zh) { sy = (ih-PH/PW*iw)/2|0, sh = PH/PW*iw; } ctx.save(); plotRoundBox(M,M, PW,PH, M/2).clip(); ctx.drawImage(img, sx,sy,sw,sh, M,M,PW,PH); ctx.restore(); plotTelop(); }; } else { plotTelop(); } } // 描画ボタン document.forms['teloparg'].addEventListener('submit',function(fev){ fev.preventDefault(); var es = fev.target.elements; var role = es['ro'].value; var name = es['na'].value; var font = es['fo'].value; if(!font) font = 'serif'; var imga = es['im'].value; if (name) drawVision(name, role, font, imga); var a = fev.target.querySelector('a'); a.href = window.location.href.replace(/\?.+$/,'')+subs('?ro=%&na=%&fo=%&im=%', role, name, font, imga); a.textContent = a.href; },false); // 外部リンクより var args = window.location.search; if (args) { var a = {}, m, re = /[\?&](\w+)=([^&]+)/g; while (m = re.exec(args)) a[m[1]] = decodeURI(m[2]); var es = document.forms['teloparg'].elements; for (var i in a) if(es[i]) es[i].value = a[i]; if (a.na) drawVision(a.na, a.ro, a.fo, a.im); } },false)</script> <form name=teloparg><dl> <dt>肩書<dd><input name=ro value='清国欽差大臣 兼 両広総督'> <dt>名前<dd><input name=na value='林 則徐'> <dt>書体<dd><input name=fo value='sans-serif'> <dt>画像URL<dd><input name=im value='./lin_zexu.jpg'> <dt><dd><button type=submit>描画</button> <dt>外部リンク<dd><a></a> </dl></form> <canvas id=vision width=400 height=640>要 HTML5 処理系</canvas>

全文を見る
すると、全ての回答が全文表示されます。
  • agehage
  • ベストアンサー率22% (2567/11425)
回答No.1

PHPのGDじゃダメ?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 怖い感じのフォント

    よくテレビ等で出てくる、怖い感じを表すフォント。 たとえば 世にも奇妙な物語の文字(ロゴの方ではなくて) 遊戯王というカードのカード名 のフォントのことです。 それはどこかで配布されているフォントなのでしょうか。 教えていただければ幸いです。

  • PHPでGmail署名ジェネレータ

    Gmail署名ジェネレータサービスを見て、コレは便利だと思い、日本語でサービスしているサイトが見当たらなかったので、自らもオリジナルを作成しようと思い立ちましたが、PHP初心者でしてなかなか上手く行きません。 参考にしようとソースを見ても、HTMLにはPHPのスクリプトは書かれていない事に気付きました。(調べるとサーバサイドで動く、との事なので当たり前ですね) 画像にユーザが入力した文字列データを画像に埋め込むというのは具体的にどういった様に処理すれば良いでしょうか。 理想としては、http://www.gmailsignature.net/のような感じです。 オリジナル画像は既に作成してあり、可能であればhttp://services.nexodyne.com/email/のようにいくつか対応させたいなと思っていますが、まずはGmail署名を作りたいです。 宜しくご指導の程、お願い致します。

    • ベストアンサー
    • PHP
  • 文字入りの画像を複数作りたいのですが。

    添付画像のような感じでメンバー紹介のための画像を作りたいと考えています。 しかし、メンバーが多いので 文字の位置・サイズ・フォントを固定して、 半透明の白い四角形とカギカッコも固定で、 画像の選択と文字の入力だけで類似のものをたくさん作成できる、 ジェネレーター的なものがあればいいなと考えています。 何か良い方法はありませんか? 現在、自分が考えているのは、ホームページ・ビルダーで 画像の上に文字を挿入していって、それぞれの位置を合わせていく という方法ですが、これでは手間が掛かり過ぎるので 少しでも簡略化できないかと思い質問させていただきました。 よろしくお願いいたします。

  • PerlのImage::Magickのフォントにつ

    Image::Magickで画像に文字を書こうと思っています。 レンタルサーバーを使うので一定の制限の下でCGIを作成するとします。 ・フォントはウィンドウズのフォントでも可能なのでしょうか? ・フォントはサーバーに単にアップロード任意のディレクトリのパスを指定しても使えるものなのでしょうか? よろしくお願いいたします。

  • チェックボックスの箱のサイズとフォントサイズは変更できるの?

    こんにちわ。 エクセル2000でチェックボックスを作成したのですが、 やや、小さいのでサイズを大きくしたいのです。 ボックスサイズ、ボックスの横に入れる文字の フォントサイズは大きくできるのでしょうか? もし、できるのなら方法を教えてください。 よろしくおねがいします。

  • htmlで伝言板を作りたいです

    htmlで伝言板を作っており、困っております。 たとえば、Aさんが文字を入力する欄(テキストボックスというのでしょうか?)に任意の文字を入力させてそれを保存し、次回他の人(もしくはAさん)がそのページを開いた際にAさんが入力した文字が表示され、さらに第3者もその文字を編集削除する方法はありますでしょうか? ちなみにここまでは作成出来てますが、テキストボックスに文字を入力して行ったんブラウザを閉じて、また開いても文字が保存されてません。 <html> <b><font color=blue>伝言</font></b><br> <form method="post" action="example.cgi"> <textarea name="example1" cols="100" rows="5"></textarea></p> </form> </html>

  • フォントをプログラムを使ってウェブで反映は可能ですか

    こんにちわ。htmlができる程度の知識で、プログラムに関しては、 素人です。ちょっとお聞きしたのですが、好みのフォントを プログラムを使ってウェブで反映させることは可能でしょうか? どういうことかといいますと、フォントは作成するソフトなど、よく ありますが、ただ、当然そのフォントが入っているコンピュータで しか表示できません。 ですので、製作したフォントをプログラムに組み込んで サーバに入れてウェブで反映させれば、誰もが同じフォントを 見ることができるのでしょうか? (その場合、ひらがな、アルファベットなら単純かもしれません  が、漢字も含めたいと思っています。) 結果的に、ウェブから、入力ボックスに文字を入力させて、 プログラムで組んだフォントを反映させれるのでしょうか? また、可能なら、phpやcgiのレベルでできるのでしょうか?

  • 遊戯王カード(オリカ)の印刷方法

    現在、遊戯王のオリカを作成しているのですが、カードのサイズが297×437の物を市販のサイズ(8.6cm×5.9cm)にして印刷したいのですが、方法が分かりません。どなたか教えてくれませんか?

  • excelでコントロールの書式を変えたい

    Excel2002において、 シートの中にコントロールを作成してるのですが、 チェックボックスの横の文字のフォントを 変更したいと考えています。 コントロールの書式設定からでは、フォント自体の 変更は出来ないようですので、 別の方法があるのか、もしくは出来ないのかを 教えてください、よろしくお願いします。

  • PHPで作成するジェネレーターでのご質問

    以前も相談させていただいたのですが、 ツイッター診断メーカーに似たものを作成しています。 http://shindanmaker.com/ そこである程度は完成したのですが、1点だけどうしても作成方法が分からず、 その部分をご相談させてもらいたいです。 以下にソースコピペします。 //textAraryには50個ほどの文字列が入っています。 $txtNum = count($textArray); //文字列を10進数に $num = sprintf("%u",crc32($click)); 10進数を配列の数で割り、余りを求める $i= $num % $txtNum; $finish = $textArray[$i]; 抜粋なのですが、上記のソースで実装するとちゃんと意図した動作するのですが、 診断用の異なるニックネームを何回か入力すると、 かなりの確率でfinishに同じ文字列が抽出されてしまいます。 出来る限り、バラけさせたいのですが、 何か良いロジックはありますでしょうか。 当方頭が回らず、、お知恵を拝借できればと幸いです。。 また、参考になるサイトでも結構ですので、 ご教授の程、よろしくお願いいたします。

    • ベストアンサー
    • PHP