@blockspoon/cert-badge-renderer 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -9
- package/package.json +1 -1
- package/src/browser/index.ts +1 -0
- package/src/utils/generateDesignHTML.ts +12 -44
package/README.md
CHANGED
|
@@ -22,7 +22,7 @@ npm install @blockspoon/cert-badge-renderer
|
|
|
22
22
|
|
|
23
23
|
## 📝 사용법 예제
|
|
24
24
|
|
|
25
|
-
### 1. 인증서 또는 배지 HTML
|
|
25
|
+
### 1. 인증서 또는 배지 객체 기반으로 HTML 생성하기
|
|
26
26
|
|
|
27
27
|
```ts
|
|
28
28
|
import { generateAchievementHTML } from "@blockspoon/cert-badge-renderer/browser";
|
|
@@ -34,7 +34,7 @@ const html = await generateAchievementHTML(achievement, {
|
|
|
34
34
|
});
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
### 2. 인증서 또는 배지 PNG 이미지 생성
|
|
37
|
+
<!-- ### 2. 인증서 또는 배지 PNG 이미지 생성
|
|
38
38
|
|
|
39
39
|
```ts
|
|
40
40
|
import { generateAchievementFile } from "@blockspoon/cert-badge-renderer/server";
|
|
@@ -49,21 +49,21 @@ const result = await generateAchievementFile(achievement, {
|
|
|
49
49
|
// Base64 저장 예시
|
|
50
50
|
const base64 = result.base64.replace(/^data:image\/png;base64,/, "");
|
|
51
51
|
require("fs").writeFileSync("certificate.png", Buffer.from(base64, "base64"));
|
|
52
|
-
```
|
|
52
|
+
``` -->
|
|
53
53
|
|
|
54
|
-
###
|
|
54
|
+
### 2. 디자인 객체 기반으로 HTML 생성하기
|
|
55
55
|
|
|
56
56
|
```ts
|
|
57
57
|
import { generateDesignHTML } from "@blockspoon/cert-badge-renderer/browser";
|
|
58
58
|
|
|
59
59
|
// certificateDesign: https://developers.kolleges.net/docs/design_get_certificate#certificatedesign-object
|
|
60
60
|
// badgeDesign: https://developers.kolleges.net/docs/design_get_badge#badgedesign-object
|
|
61
|
-
const html = await generateDesignHTML(certificateDesign || badgeDesign
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
const html = await generateDesignHTML(certificateDesign || badgeDesign, {
|
|
62
|
+
size: 600, // 렌더링 크기 (px)
|
|
63
|
+
});
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
-
### 4. 디자인(JSON) 기반으로 PNG 생성하기
|
|
66
|
+
<!-- ### 4. 디자인(JSON) 기반으로 PNG 생성하기
|
|
67
67
|
|
|
68
68
|
```ts
|
|
69
69
|
import { generateDesignFile } from "@blockspoon/cert-badge-renderer/server";
|
|
@@ -75,7 +75,7 @@ const png = await generateDesignFile(certificateDesign || badgeDesign);
|
|
|
75
75
|
require("fs").writeFileSync("badge.png", png.buffer);
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
---
|
|
78
|
+
--- -->
|
|
79
79
|
|
|
80
80
|
## 🔐 API Key 사용 방식
|
|
81
81
|
|
package/package.json
CHANGED
package/src/browser/index.ts
CHANGED
|
@@ -14,38 +14,6 @@ import {
|
|
|
14
14
|
import Certificates from "../templates/certificates";
|
|
15
15
|
import { portraitComponents } from "../constants/componentsDirection";
|
|
16
16
|
|
|
17
|
-
async function convertImageToBase64(url: string): Promise<string> {
|
|
18
|
-
try {
|
|
19
|
-
// URL이 이미 baseUrl을 포함하고 있는지 확인
|
|
20
|
-
let finalUrls = [];
|
|
21
|
-
finalUrls = url.split("https://");
|
|
22
|
-
const finalUrl = "https://" + finalUrls.pop();
|
|
23
|
-
|
|
24
|
-
const response = await fetch(finalUrl, {
|
|
25
|
-
credentials: "include",
|
|
26
|
-
headers: {
|
|
27
|
-
Accept: "image/*",
|
|
28
|
-
},
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
if (!response.ok) {
|
|
32
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const contentType = response.headers.get("content-type");
|
|
36
|
-
if (!contentType?.startsWith("image/")) {
|
|
37
|
-
throw new Error(`Not an image! content-type: ${contentType}`);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const buffer = await response.arrayBuffer();
|
|
41
|
-
const base64 = Buffer.from(buffer).toString("base64");
|
|
42
|
-
return `data:${contentType};base64,${base64}`;
|
|
43
|
-
} catch (error) {
|
|
44
|
-
console.error(`이미지 변환 실패: ${url}`, error);
|
|
45
|
-
return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
17
|
export async function generateDesignHTML(
|
|
50
18
|
data: IAchievementDesignItem,
|
|
51
19
|
options: DesignOptions = {}
|
|
@@ -283,19 +251,19 @@ export async function generateDesignHTML(
|
|
|
283
251
|
}
|
|
284
252
|
} else if (element.src) {
|
|
285
253
|
// 이미지를 base64로 변환
|
|
286
|
-
const base64Image = await convertImageToBase64(element.src);
|
|
254
|
+
// const base64Image = await convertImageToBase64(element.src);
|
|
287
255
|
html += `<img
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
256
|
+
src="${element.src}"
|
|
257
|
+
alt="Uploaded"
|
|
258
|
+
style="
|
|
259
|
+
width: 100%;
|
|
260
|
+
height: 100%;
|
|
261
|
+
max-width: 100%;
|
|
262
|
+
max-height: 100%;
|
|
263
|
+
object-fit: contain;
|
|
264
|
+
align-self: center;
|
|
265
|
+
"
|
|
266
|
+
/>`;
|
|
299
267
|
}
|
|
300
268
|
html += `</div>`;
|
|
301
269
|
}
|