ChatGPTにプログラムを書かせよう
ChatGPTにプログラムを書かせよう
AIが進歩すると、色々な職業がAIに仕事を奪われると言われていますね。
私はIT屋で、システム開発を生業としているのですが、プログラマーもそのうち要らなくなると言われています。恐ろしいことだ...
でもAIが台頭してくる流れは変えられないので、今からAIを上手に活用してAIがプログラムを組める時代になった時に、AIプログラマーをマネージングできるスキルを身に着けておくのもいいかもと思っています。時代の流れには逆らえんのじゃ~
前回、ChatGPTとの対話でSVG形式のテキストファイルを出力してもらったので、今回はそのテキストファイルを実際にグラフィックとして出力するプログラムをやはりChatGPTに組んでもらおうと考えています
いきなりプログラム作れよ指示
とりあえず作らせてみましょう。細かい調整は後々すればよいや...と考えていたのですが...
JavaScriptで、テキストエリアにSVG形式のテキストファイルを張り付けて、「実行」ボタンを押すと、画面上にそのSVGのイメージを出力するプログラムを組んでください。
以下は、JavaScriptを使用してテキストエリアにSVG形式のテキストファイルを張り付けて、画面上にSVGのイメージを出力するプログラムの例です。
HTML:
html<textarea id="svg-textarea"></textarea>
<button id="execute-btn">実行</button>
<div id="output-container"></div>
JavaScript:
javascriptconst executeBtn = document.getElementById("execute-btn");
executeBtn.addEventListener("click", () => {
const svgTextarea = document.getElementById("svg-textarea");
const outputContainer = document.getElementById("output-container");
// テキストエリアの値を取得し、SVG画像を生成する
const svgText = svgTextarea.value;
const svgImage = new Image();
svgImage.src = "data:image/svg+xml;base64," + btoa(svgText);
// 画像を表示する
outputContainer.innerHTML = "";
outputContainer.appendChild(svgImage);
});
このプログラムでは、execute-btn
というIDを持つボタンをクリックすると、svg-textarea
というIDを持つテキストエリアからSVGのテキストを取得し、output-container
というIDを持つ要素にSVG画像を表示します。btoa
関数を使用してSVGのテキストをBase64エンコードし、data:image/svg+xml;base64,
のプレフィックスを付けて、src
属性に設定されたImage
オブジェクトを生成しています。
このプログラムを使用するには、テキストエリアにSVG形式のテキストを貼り付けて、「実行」ボタンをクリックするだけです。
提案されたものはパーツなので、そのままでは動きません。
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
window.addEventListener( "load", () =>
{
const executeBtn = document.getElementById("execute-btn");
executeBtn.addEventListener("click", () => {
const svgTextarea = document.getElementById("svg-textarea");
const outputContainer = document.getElementById("output-container");
// テキストエリアの値を取得し、SVG画像を生成する
const svgText = svgTextarea.value;
const svgImage = new Image();
svgImage.src = "data:image/svg+xml;base64," + btoa(svgText);
// 画像を表示する
outputContainer.innerHTML = "";
outputContainer.appendChild(svgImage);
});
});
</script>
</head>
<body>
<textarea cols="160" rows="30" id="svg-textarea"></textarea><br>
<button id="execute-btn">実行</button>
<div id="output-container"></div>
</body>
</html>
上記のコードだと、svgTextに日本語文字列が入っていた場合btoaでエラーが発生するんだけど
確かに、日本語を含むテキストをBase64エンコードするときには、UTF-8でエンコードする必要があります。そのため、以下のように、encodeURIComponent
関数を使用してSVGのテキストをUTF-8エンコードし、Base64エンコードする必要があります。
javascriptconst executeBtn = document.getElementById("execute-btn");
executeBtn.addEventListener("click", () => {
const svgTextarea = document.getElementById("svg-textarea");
const outputContainer = document.getElementById("output-container");
// テキストエリアの値を取得し、SVG画像を生成する
const svgText = svgTextarea.value;
const svgData = "data:image/svg+xml;base64," + btoa(unescape(encodeURIComponent(svgText)));
const svgImage = new Image();
svgImage.src = svgData;
// 画像を表示する
outputContainer.innerHTML = "";
outputContainer.appendChild(svgImage);
});
このプログラムでは、encodeURIComponent
関数を使用してSVGのテキストをUTF-8エンコードし、unescape
関数を使用して、エンコードされたテキストをデコードしています。その後、btoa
関数を使用して、Base64エンコードを行います。最後に、data:image/svg+xml;base64,
のプレフィックスを付けた文字列として、Image
オブジェクトのsrc
属性に設定しています。
これにより、日本語を含むSVGのテキストをエンコードし、画像として正しく表示できるようになります。
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
window.addEventListener( "load", () =>
{
const executeBtn = document.getElementById("execute-btn");
executeBtn.addEventListener("click", () => {
const svgTextarea = document.getElementById("svg-textarea");
const outputContainer = document.getElementById("output-container");
// テキストエリアの値を取得し、SVG画像を生成する
const svgText = svgTextarea.value;
const svgData = "data:image/svg+xml;base64," + btoa(unescape(encodeURIComponent(svgText)));
const svgImage = new Image();
svgImage.src = svgData;
// 画像を表示する
outputContainer.innerHTML = "";
outputContainer.appendChild(svgImage);
});
});
</script>
</head>
<body>
<textarea cols="160" rows="30" id="svg-textarea"></textarea><br>
<button id="execute-btn">実行</button>
<div id="output-container"></div>
</body>
</html>
コメント
コメントを投稿