回答編集履歴

2

SVGの生成

2024/03/27 07:07

投稿

lovam-nm
lovam-nm

スコア18

test CHANGED
@@ -211,3 +211,62 @@
211
211
 
212
212
  </html>
213
213
  ```
214
+
215
+ QRをSVGで生成
216
+ 利用ライブラリ:https://www.jsdelivr.com/package/npm/qrcode-svg
217
+ ```
218
+ <!DOCTYPE html>
219
+ <html lang="ja">
220
+
221
+ <head>
222
+ <meta charset="UTF-8">
223
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
224
+ <title>QRコードSVG生成アプリ</title>
225
+ <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.7.1.min.js"></script>
226
+ <script src="https://cdn.jsdelivr.net/npm/qrcode-svg@1.1.0/lib/qrcode.min.js"></script>
227
+ </head>
228
+
229
+ <body>
230
+ <p style="font-size: 32px;">QRコードSVG生成アプリ</p>
231
+ <input type="text" id="inputText" placeholder="QRコードに変換するテキストを入力" value="https://">
232
+ <button onclick="generateQR()">QRコード生成</button>
233
+ <div id="qrcode"></div>
234
+ <a id="downloadLink" style="display: none;">QRコードをダウンロード</a>
235
+ <script>
236
+ function generateQR() {
237
+ // 入力値
238
+ var inputText = $("#inputText").val();
239
+
240
+ // QRコードのパラメータ
241
+ const param = {
242
+ content: inputText,
243
+ padding: 0,
244
+ width: 256,
245
+ height: 256,
246
+ color: "#000000",
247
+ background: "#ffffff",
248
+ ecl: "M",
249
+ join: true,
250
+ };
251
+ // QRコードを初期化し、SVGを生成
252
+ $("#qrcode").empty().append(new QRCode(param).svg());
253
+
254
+ // ダウンロードリンクの表示
255
+ var svgString = $("#qrcode svg")[0].outerHTML;
256
+ var fileName = "QRcode_" + inputText + "_" + generateRandomString() + ".svg"; // ファイル名の生成
257
+ var downloadLink = document.getElementById("downloadLink");
258
+ downloadLink.href = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svgString);
259
+ downloadLink.download = fileName;
260
+ downloadLink.innerText = "QRコードをダウンロード"; // リンクのテキストを設定
261
+ downloadLink.style.display = "inline"; // displayをinlineに変更
262
+ }
263
+
264
+ function generateRandomString() {
265
+ return Math.random().toString(36).substring(2, 8); // ランダムな文字列を生成
266
+ }
267
+ </script>
268
+ </body>
269
+
270
+ </html>
271
+ ```
272
+

1

Wordなどで表示されたときの修正

2024/03/24 16:07

投稿

lovam-nm
lovam-nm

スコア18

test CHANGED
@@ -127,3 +127,87 @@
127
127
 
128
128
  </html>
129
129
  ```
130
+
131
+ 修正案
132
+ ```
133
+ <!DOCTYPE html>
134
+ <html lang="ja">
135
+
136
+ <head>
137
+ <meta charset="UTF-8">
138
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
139
+ <title>QRコードSVG生成アプリ</title>
140
+ <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.7.1.min.js"></script>
141
+ <script src="https://cdn.rawgit.com/jeromeetienne/jquery-qrcode/master/jquery.qrcode.min.js"></script>
142
+ </head>
143
+
144
+ <body>
145
+ <p style="font-size: 32px;">QRコードSVG生成アプリ</p>
146
+ <input type="text" id="inputText" placeholder="QRコードに変換するテキストを入力" value="https://">
147
+ <button onclick="generateQR()">QRコード生成</button>
148
+ <div id="qrcode"></div>
149
+ <div id="svgarea"></div>
150
+ <a id="downloadLink" style="display: none;">QRコードをダウンロード</a>
151
+ <script>
152
+ function generateQR() {
153
+ var inputText = $("#inputText").val();
154
+ // QRコードを生成
155
+ $("#qrcode").empty().qrcode({
156
+ text: inputText,
157
+ render: 'canvas',
158
+ fill: '#000',
159
+ background: '#fff',
160
+ size: 256
161
+ });
162
+ $("#qrcode canvas").css('display', 'none');
163
+ createSVG($("#qrcode canvas")[0]);
164
+ // ダウンロードリンクの表示
165
+ var svgString = $("#qrcode svg")[0].outerHTML;
166
+ var fileName = "QRcode_" + inputText + "_" + generateRandomString() + ".svg"; // ファイル名の生成
167
+ var downloadLink = document.getElementById("downloadLink");
168
+ downloadLink.href = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svgString);
169
+ downloadLink.download = fileName;
170
+ downloadLink.innerText = "QRコードをダウンロード"; // リンクのテキストを設定
171
+ downloadLink.style.display = "inline"; // displayをinlineに変更
172
+ }
173
+
174
+ function generateRandomString() {
175
+ return Math.random().toString(36).substring(2, 8); // ランダムな文字列を生成
176
+ }
177
+
178
+ function createSVG(canvas) {
179
+ var width = canvas.width;
180
+ var height = canvas.height;
181
+ // SVGのnamespace付きでElementを作成する
182
+ var svg = createElement("svg", { width: width, height: height, xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink" });
183
+ $("#qrcode").append(svg); // "#qrcode" 配下にsvgを追加する
184
+ var defs = createElement("defs");
185
+ svg.appendChild(defs);
186
+ // fill用にpatternを作成
187
+ var pattern = createElement("pattern", { id: "img", x: 0, y: 0, width: width, height: height, patternUnits: "userSpaceOnUse" });
188
+ defs.appendChild(pattern);
189
+ // patternに使うimageを作成
190
+ var image = createElement("image", { x: 0, y: 0, width: width, height: height });
191
+ image.setAttribute("href", canvas.toDataURL()); // xlink:hrefをhrefに変更
192
+ pattern.appendChild(image);
193
+ // 角丸の四角形を作り、上のパターンで塗りつぶす
194
+ var rect = createElement("rect", { x: 0, y: 0, width: width, height: height, rx: 0, ry: 0, fill: "url(#img)" });
195
+ svg.appendChild(rect);
196
+ };
197
+
198
+ // SVGのnamespace付きでElementを作成する
199
+ function createElement(tag, attributes) {
200
+ var ret = document.createElementNS("http://www.w3.org/2000/svg", tag);
201
+ if (ret && attributes) {
202
+ for (var key in attributes) {
203
+ var value = attributes[key];
204
+ ret.setAttribute(key, value);
205
+ }
206
+ }
207
+ return ret;
208
+ };
209
+ </script>
210
+ </body>
211
+
212
+ </html>
213
+ ```