fix exp
Browse files- src/lib/services/picletExport.ts +23 -31
src/lib/services/picletExport.ts
CHANGED
@@ -10,57 +10,49 @@ export async function generateShareableImage(piclet: PicletInstance): Promise<Bl
|
|
10 |
const ctx = canvas.getContext('2d');
|
11 |
if (!ctx) throw new Error('Could not create canvas context');
|
12 |
|
13 |
-
// Set canvas size
|
14 |
-
const canvasSize =
|
15 |
canvas.width = canvasSize;
|
16 |
canvas.height = canvasSize;
|
17 |
|
18 |
-
// Fill background with
|
19 |
-
|
20 |
-
gradient.addColorStop(0, '#87CEEB'); // Sky blue
|
21 |
-
gradient.addColorStop(0.6, '#98D98E'); // Light green
|
22 |
-
gradient.addColorStop(1, '#567d46'); // Dark green
|
23 |
-
ctx.fillStyle = gradient;
|
24 |
ctx.fillRect(0, 0, canvasSize, canvasSize);
|
25 |
|
26 |
-
// Load
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
const grassImg = await loadImage('/assets/grass.PNG');
|
28 |
-
const platformSize =
|
29 |
const platformX = (canvasSize - platformSize) / 2;
|
30 |
-
const platformY =
|
31 |
ctx.drawImage(grassImg, platformX, platformY, platformSize, platformSize);
|
32 |
|
33 |
-
//
|
34 |
-
const picletImg = await loadImage(piclet.imageData || piclet.imageUrl);
|
35 |
-
const picletSize = 300;
|
36 |
-
const picletX = (canvasSize - picletSize) / 2;
|
37 |
-
const picletY = platformY - picletSize + 100;
|
38 |
ctx.drawImage(picletImg, picletX, picletY, picletSize, picletSize);
|
39 |
|
40 |
-
// Add piclet
|
41 |
ctx.fillStyle = 'white';
|
42 |
ctx.strokeStyle = 'black';
|
43 |
-
ctx.lineWidth =
|
44 |
-
ctx.font = 'bold
|
45 |
ctx.textAlign = 'center';
|
46 |
|
47 |
const nameText = piclet.nickname || piclet.typeId;
|
48 |
-
const levelText = `Lv.${piclet.level}`;
|
49 |
|
50 |
// Draw name with outline
|
51 |
-
ctx.strokeText(nameText, canvasSize / 2,
|
52 |
-
ctx.fillText(nameText, canvasSize / 2,
|
53 |
-
|
54 |
-
// Draw level with outline
|
55 |
-
ctx.font = 'bold 36px Arial';
|
56 |
-
ctx.strokeText(levelText, canvasSize / 2, 150);
|
57 |
-
ctx.fillText(levelText, canvasSize / 2, 150);
|
58 |
|
59 |
-
// Load and draw watermark
|
60 |
const logoImg = await loadImage('/assets/snap_logo.png');
|
61 |
-
const logoSize =
|
62 |
-
ctx.globalAlpha = 0.
|
63 |
-
ctx.drawImage(logoImg, canvasSize - logoSize -
|
64 |
ctx.globalAlpha = 1.0;
|
65 |
|
66 |
// Get the image as blob
|
|
|
10 |
const ctx = canvas.getContext('2d');
|
11 |
if (!ctx) throw new Error('Could not create canvas context');
|
12 |
|
13 |
+
// Set canvas size to match original piclet resolution
|
14 |
+
const canvasSize = 1024;
|
15 |
canvas.width = canvasSize;
|
16 |
canvas.height = canvasSize;
|
17 |
|
18 |
+
// Fill background with solid sky blue
|
19 |
+
ctx.fillStyle = '#87CEEB';
|
|
|
|
|
|
|
|
|
20 |
ctx.fillRect(0, 0, canvasSize, canvasSize);
|
21 |
|
22 |
+
// Load piclet image first to maintain original size
|
23 |
+
const picletImg = await loadImage(piclet.imageData || piclet.imageUrl);
|
24 |
+
const picletSize = 512; // Display at half the canvas size for better composition
|
25 |
+
const picletX = (canvasSize - picletSize) / 2;
|
26 |
+
const picletY = canvasSize / 2 - picletSize / 2 + 50; // Center with slight offset down
|
27 |
+
|
28 |
+
// Load and draw grass platform positioned under the piclet
|
29 |
const grassImg = await loadImage('/assets/grass.PNG');
|
30 |
+
const platformSize = picletSize + 100; // Slightly larger than piclet
|
31 |
const platformX = (canvasSize - platformSize) / 2;
|
32 |
+
const platformY = picletY + picletSize - 150; // Position so piclet sits on platform
|
33 |
ctx.drawImage(grassImg, platformX, platformY, platformSize, platformSize);
|
34 |
|
35 |
+
// Draw piclet on top of platform
|
|
|
|
|
|
|
|
|
36 |
ctx.drawImage(picletImg, picletX, picletY, picletSize, picletSize);
|
37 |
|
38 |
+
// Add piclet name only (no level)
|
39 |
ctx.fillStyle = 'white';
|
40 |
ctx.strokeStyle = 'black';
|
41 |
+
ctx.lineWidth = 6;
|
42 |
+
ctx.font = 'bold 64px Arial';
|
43 |
ctx.textAlign = 'center';
|
44 |
|
45 |
const nameText = piclet.nickname || piclet.typeId;
|
|
|
46 |
|
47 |
// Draw name with outline
|
48 |
+
ctx.strokeText(nameText, canvasSize / 2, 120);
|
49 |
+
ctx.fillText(nameText, canvasSize / 2, 120);
|
|
|
|
|
|
|
|
|
|
|
50 |
|
51 |
+
// Load and draw translucent watermark
|
52 |
const logoImg = await loadImage('/assets/snap_logo.png');
|
53 |
+
const logoSize = 150;
|
54 |
+
ctx.globalAlpha = 0.3; // More translucent
|
55 |
+
ctx.drawImage(logoImg, canvasSize - logoSize - 30, canvasSize - logoSize - 30, logoSize, logoSize);
|
56 |
ctx.globalAlpha = 1.0;
|
57 |
|
58 |
// Get the image as blob
|