From 28026bcc09419d27d2f36765526b5166fa062776 Mon Sep 17 00:00:00 2001 From: Yufan Sheng Date: Tue, 18 Jun 2024 20:19:06 +0800 Subject: [PATCH] refactor: reduce the open graph size and improve the logo in open graph. (#44) * feat: drop the open graph png. * feat: better blog logo in og. * docs: drop the todo in readme. --- astro.config.ts | 2 -- package-lock.json | 24 +++++++------------ package.json | 5 ++-- src/assets/og/logo-dark.png | Bin 18141 -> 0 bytes src/assets/og/open-graph.png | Bin 53966 -> 0 bytes src/env.d.ts | 1 - src/helpers/images.ts | 1 - src/helpers/og.ts | 44 ++++++++++++++++++++++++++++------- src/pages/og/[slug].png.ts | 8 +++---- 9 files changed, 50 insertions(+), 35 deletions(-) delete mode 100644 src/assets/og/logo-dark.png delete mode 100644 src/assets/og/open-graph.png diff --git a/astro.config.ts b/astro.config.ts index b150148..59d561f 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -1,7 +1,6 @@ import mdx from '@astrojs/mdx'; import node from '@astrojs/node'; import { defineConfig, envField } from 'astro/config'; -import arraybuffer from 'vite-plugin-arraybuffer'; import { astroImage } from './remark-plugins/images'; // Dynamic switch the site. This is hard coded. @@ -51,7 +50,6 @@ export default defineConfig({ enabled: false, }, vite: { - plugins: [arraybuffer()], // Add this for avoiding the needless import optimize in Vite. optimizeDeps: { exclude: ['@napi-rs/canvas'] }, }, diff --git a/package-lock.json b/package-lock.json index 0d047e5..a8acc90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,7 +28,7 @@ "@napi-rs/canvas": "^0.1.53", "@types/lodash": "^4.17.5", "@types/luxon": "^3.4.2", - "@types/node": "^20.14.2", + "@types/node": "^20.14.5", "@types/pg": "^8.11.6", "@types/qrcode-svg": "^1.1.4", "@types/unist": "^3.0.2", @@ -42,8 +42,7 @@ "rimraf": "^5.0.7", "sharp": "^0.33.4", "typescript": "^5.4.5", - "unist-util-visit": "^5.0.0", - "vite-plugin-arraybuffer": "^0.0.7" + "unist-util-visit": "^5.0.0" } }, "node_modules/@ampproject/remapping": { @@ -2741,9 +2740,9 @@ } }, "node_modules/@types/node": { - "version": "20.14.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", - "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "version": "20.14.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.5.tgz", + "integrity": "sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -3993,9 +3992,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.803", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.803.tgz", - "integrity": "sha512-61H9mLzGOCLLVsnLiRzCbc63uldP0AniRYPV3hbGVtONA1pI7qSGILdbofR7A8TMbOypDocEAjH/e+9k1QIe3g==", + "version": "1.4.805", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.805.tgz", + "integrity": "sha512-8W4UJwX/w9T0QSzINJckTKG6CYpAUTqsaWcWIsdud3I1FYJcMgW9QqT1/4CBff/pP/TihWh13OmiyY8neto6vw==", "license": "ISC" }, "node_modules/emmet": { @@ -8708,13 +8707,6 @@ } } }, - "node_modules/vite-plugin-arraybuffer": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/vite-plugin-arraybuffer/-/vite-plugin-arraybuffer-0.0.7.tgz", - "integrity": "sha512-c4Egxj7NUGco2Ggw9KUBToOxuc7Ws7mWm0hz/QnaT5Ph8ycC7ypMBOD31NuhPSx+wdUvgIbS1XpMvJLSdHakPA==", - "dev": true, - "license": "MIT" - }, "node_modules/vitefu": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", diff --git a/package.json b/package.json index 0ad3328..080a773 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "@napi-rs/canvas": "^0.1.53", "@types/lodash": "^4.17.5", "@types/luxon": "^3.4.2", - "@types/node": "^20.14.2", + "@types/node": "^20.14.5", "@types/pg": "^8.11.6", "@types/qrcode-svg": "^1.1.4", "@types/unist": "^3.0.2", @@ -74,7 +74,6 @@ "rimraf": "^5.0.7", "sharp": "^0.33.4", "typescript": "^5.4.5", - "unist-util-visit": "^5.0.0", - "vite-plugin-arraybuffer": "^0.0.7" + "unist-util-visit": "^5.0.0" } } diff --git a/src/assets/og/logo-dark.png b/src/assets/og/logo-dark.png deleted file mode 100644 index cff93b51579a58ca8cdb55dc36a9f0064da1646b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18141 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

gT#6Yzgcwf)ENvlyq7@T#3JscG1i1aeO< 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 OGB_9fnHNsM>Hh+~kDJ&4 diff --git a/src/assets/og/open-graph.png b/src/assets/og/open-graph.png deleted file mode 100644 index 1a1ee64c7a2ee59eb8d090195776b10ae5ed5d95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53966 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 diff --git a/src/env.d.ts b/src/env.d.ts index 204abbc..338ba9e 100644 --- a/src/env.d.ts +++ b/src/env.d.ts @@ -1,4 +1,3 @@ /// /// /// -/// diff --git a/src/helpers/images.ts b/src/helpers/images.ts index dde65d2..bf3a4d7 100644 --- a/src/helpers/images.ts +++ b/src/helpers/images.ts @@ -52,7 +52,6 @@ export const blurStyle = (image: Image) => ({ // Copied and modified https://github.com/zce/velite/blob/main/src/assets.ts export const imageMetadata = async (publicPath: string): Promise => { - // Load for sharp on demand for avoiding the resolver issues in production. const { default: sharp } = await import('sharp'); if (!publicPath.startsWith('/')) { diff --git a/src/helpers/og.ts b/src/helpers/og.ts index 8ed39ee..9a4a359 100644 --- a/src/helpers/og.ts +++ b/src/helpers/og.ts @@ -9,8 +9,19 @@ import { options } from '@/helpers/schema'; import { Canvas, GlobalFonts, Image, type SKRSContext2D } from '@napi-rs/canvas'; import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; -import font from '../assets/og/NotoSansSC-Bold.ttf?arraybuffer'; -import logoDark from '../assets/og/logo-dark.png?arraybuffer'; + +const darkLogo = ` + + + + + + + + + + +`; const getStringWidth = (text: string, fontSize: number) => { let result = 0; @@ -114,18 +125,20 @@ const fetchCover = async (cover: string): Promise => { return await readFile(coverPath); }; -export { default as defaultOpenGraph } from '../assets/og/open-graph.png?arraybuffer'; - export interface OpenGraphProps { title: string; summary: string; cover: string; } -export const drawOpenGraph = async ({ title, summary, cover }: OpenGraphProps) => { +export const defaultOpenGraph = async (): Promise => { + return await fetchCover('/images/default-cover.jpg'); +}; + +export const drawOpenGraph = async ({ title, summary, cover }: OpenGraphProps): Promise => { // Register the font if it doesn't exist if (!GlobalFonts.has('NotoSansSC-Bold')) { - const fontBuffer = Buffer.from(font); + const fontBuffer = await readFile(join(process.cwd(), 'src/assets/og/NotoSansSC-Bold.ttf')); GlobalFonts.register(fontBuffer, 'NotoSansSC-Bold'); } @@ -135,7 +148,7 @@ export const drawOpenGraph = async ({ title, summary, cover }: OpenGraphProps) = // Generate the logo image const logoImage = new Image(); - logoImage.src = Buffer.from(logoDark); + logoImage.src = Buffer.from(darkLogo, 'utf-8'); // Mark sure the summary length is small enough to fit in const description = `${summary @@ -171,5 +184,20 @@ export const drawOpenGraph = async ({ title, summary, cover }: OpenGraphProps) = ctx.restore(); - return await canvas.encode('png'); + const encodedImage = await canvas.encode('png'); + return await compressImage(encodedImage); +}; + +const compressImage = async (buf: Buffer): Promise => { + const { default: sharp } = await import('sharp'); + return await sharp(buf) + .png({ + compressionLevel: 9, + adaptiveFiltering: true, + force: true, + palette: true, + quality: 75, + progressive: true, + }) + .toBuffer(); }; diff --git a/src/pages/og/[slug].png.ts b/src/pages/og/[slug].png.ts index 40f04d2..3829d87 100644 --- a/src/pages/og/[slug].png.ts +++ b/src/pages/og/[slug].png.ts @@ -2,8 +2,8 @@ import { defaultOpenGraph, drawOpenGraph } from '@/helpers/og'; import { getPage, getPost, pages, posts } from '@/helpers/schema'; import type { APIRoute } from 'astro'; -const fallback = () => - new Response(defaultOpenGraph, { +const fallback = async () => + new Response(await defaultOpenGraph(), { headers: { 'Content-Type': 'image/png' }, }); @@ -12,7 +12,7 @@ export const prerender = true; export const GET: APIRoute = async ({ params }) => { const slug = params.slug; if (!slug) { - return fallback(); + return await fallback(); } let title: string; @@ -25,7 +25,7 @@ export const GET: APIRoute = async ({ params }) => { // Fallback to query from pages const page = getPage(slug); if (!page) { - return fallback(); + return await fallback(); } title = page.title;