Fraser commited on
Commit
c6f0353
·
1 Parent(s): e752926
Files changed (1) hide show
  1. 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 (square format for social media sharing)
14
- const canvasSize = 800;
15
  canvas.width = canvasSize;
16
  canvas.height = canvasSize;
17
 
18
- // Fill background with a gradient
19
- const gradient = ctx.createLinearGradient(0, 0, 0, canvasSize);
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 and draw grass platform
 
 
 
 
 
 
27
  const grassImg = await loadImage('/assets/grass.PNG');
28
- const platformSize = 400;
29
  const platformX = (canvasSize - platformSize) / 2;
30
- const platformY = canvasSize - platformSize + 100;
31
  ctx.drawImage(grassImg, platformX, platformY, platformSize, platformSize);
32
 
33
- // Load and draw piclet
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 info text
41
  ctx.fillStyle = 'white';
42
  ctx.strokeStyle = 'black';
43
- ctx.lineWidth = 4;
44
- ctx.font = 'bold 48px Arial';
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, 100);
52
- ctx.fillText(nameText, canvasSize / 2, 100);
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 = 120;
62
- ctx.globalAlpha = 0.7; // Semi-transparent
63
- ctx.drawImage(logoImg, canvasSize - logoSize - 20, canvasSize - logoSize - 20, logoSize, 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