4단계만 수행하면 열린 그래픽 이미지 엔진을 만들 수 있습니다.
22274 단어 nextjstutorialtailwindcssjavascript
가장 유행하는 Open Graph 메타데이터 속성은 Open Graph 이미지인데 이것은 웹 링크와 함께 표시된 도형으로 미리 보기로 되어 있다.공유할 때 열린 도형 이미지가 있는 페이지가 더욱 매력적이고 전문적으로 보인다.이러한 이미지 메타데이터가 없는 모든 사이트에는 회색 상자나 눈에 띄지 않는 일반적인 아이콘이 나타납니다.
오픈그래픽 이미지는 웹 페이지 URL에 연결된 다른 정보에 대한 보충으로 간단한 미리보기를 제공하겠다는 생각이지만, 오픈그래픽 이미지를 공유의 주요 속성으로 만드는 추세로 바뀌었다.큰 텍스트, 로고, 컬러 배경, 읽기 시간, 발표 날짜, 심지어 더 많은 개방된 도형 이미지를 보면 알 수 있다.오늘날 가장 좋은 개방된 도형 이미지는 사용자로 하여금 관련 웹 페이지를 방문하기 전에 웹 사이트에 대해 일종의 느낌을 가지게 한다.
그래서 우리는 동적 개방 도형 이미지 생성기를 만들어서 당신의 사이트에 사용할 수 있습니다!
사용한 프레임
우리는 NextJS을 사용하여 우리의 사이트와 개방된 도형 이미지 레이아웃을 구축할 것이다. Tailwind CSS은 모든 것을 설계하고 Vercel은 사이트와 서버가 없는 개방된 도형 생성기 기능을 배치할 것이다.물론 우리는
chrome-aws-lambda
과 같은 NPM 패키지도 사용할 것이다.설치 프로그램
NextJS 애플리케이션을 만듭니다.만약 당신이 이미 NextJS 앱을 가지고 있다면, 당신은 이 단계를 뛰어넘을 수 있습니다.
> npx create-next-app open-graph-generator
Tailwind CSS를 설정하여 스타일 설정을 단순화합니다.마찬가지로 CSS 프레임이 이미 설정되어 있으면 이 단계를 건너뛸 수 있습니다.Tailwind CSS 및 종속성 설치:
> cd open-graph-generator
> npm i -D tailwindcss postcss autoprefixer
> npx tailwindcss init -p
Tailwind 구성에 JSX 파일 경로 추가module.exports = {
content: [
"./pages/**/*.{js,ts,jsx,tsx}",
"./components/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
스타일 파일에 순풍 추가@tailwind base;
@tailwind components;
@tailwind utilities;
레이아웃 생성하기
먼저 UI를 구축합니다.만약 네가 열린 도형 이미지의 외관에 대해 생각이 있다면, 정말 좋겠다.만약 없다면, 몇 가지 기본 원소와 실험부터 시작해라!이미지를 확립하는 것은 틀림없다.
열린 그래픽 레이아웃을 위한 페이지를 만듭니다.OG 이미지의 일반 크기는 1200px x 630px이므로 이러한 크기를 경계로 사용합니다.제목, 날짜, 저자, 프로필 이미지를 추가합니다.
import { useRouter } from 'next/router'
export default function Opengraph() {
const { query } = useRouter()
const { title } = query
return (
<div className='w-[1200px] h-[630px]'>
<div class='flex flex-col h-full items-center justify-between px-12 py-24'>
<h1 class='text-7xl grow font-semibold'>{title}</h1>
<img class='w-24 h-24 rounded-full mb-4' src='/profile.jpg' />
<span class='text-3xl'>by Kartik Chaturvedi</span>
</div>
</div>
)
}
너는 이 코드 중의 일부 것들을 알아차릴 수 있으니, 우리가 그것들을 분해하자.우선, 그래, 너는 큰 글씨체를 사용해야 해!열린 그래픽 이미지를 사용하는 웹 미리보기는 일반적으로 작은 크기로 표시됩니다. (메시지나 트윗의 링크를 생각해 보십시오.)너는 이 그림들을 쉽게 확대할 수 없기 때문에, 디자인이 뚜렷하고 굵으며, 문자가 뚜렷하고 읽기 쉽다는 것을 확보해야 한다.
그 다음에 우리는
useRouter
React 갈고리를 사용하여 URL에서 title
을 추출하여 우리의 React 구성 요소에 넣는다.이것은 열린 도형 이미지를 동적화하는 관건이다.URL에서 정확한 값을 전달하고 이미지로 변환할 수 있도록 조립된 구성 요소를 얻을 수 있습니다.이 모든 것이 작용하는 것을 보고 환경을 개발하자.
> npm run dev
localhost:3000/opengraph?title=Hello%20World
에 방문하면 검색 문자열이 텍스트로 해석되고 레이아웃에 나타나는 것을 볼 수 있습니다.필요에 따라 이 레이아웃 어셈블리의 스타일을 계속 설정할 수 있습니다.출판 날짜, 읽기 시간, 글자 수, 좋아하는 수량 등 매개 변수를 추가할 수 있습니다.정말 제한이 없어요!
화면 캡처 기능 설정
분명히 위 브라우저에서 본 구성 요소는 HTML로 보이는 React 구성 요소이며 Open Graph에는 적용되지 않습니다.이 프로토콜은 해석이나 스타일 지연 없이 프로그램이 일치하고 실시간으로 표시할 수 있도록 그림이 필요합니다.
React 구성 요소를 이미지로 변환하는 가장 좋은 방법은 브라우저의 화면 캡처를 찍는 것입니다.이것이 바로 우리가 서버 없는 함수에서 해야 할 일이다.Chrome의 헤드 없는 버전인
chrome-aws-lambda
은 서버 없는 어플리케이션을 위해 설계되었으며 일반적으로 UI 테스트를 자동화하는 데 사용됩니다.크롬과 같은 헤더 브라우저를 제어하는 도구인 puppeteer
이 필요합니다.> npm i chrome-aws-lambda puppeteer-core
NextJS는 기존의 서버 없는 함수를 지원하기 때문에 /api
폴더에서 이 함수를 만들 수 있습니다.import chromium from 'chrome-aws-lambda'
export default async function opengraph(req, res) {
// Parse the title
const { title } = req.query
const baseURL = req.headers.host
// Open the browser with the right window size
const browser = await chromium.puppeteer.launch({
args: chromium.args,
defaultViewport: { width: 1200, height: 630 },
executablePath: await chromium.executablePath, // change for localhost
headless: chromium.headless,
ignoreHTTPSErrors: true,
})
// Navigate a new browser page to the layout page
let page = await browser.newPage()
await page.goto(`${baseURL}/opengraph?title=${title}`, { waitUntil: 'networkidle2' })
// Take a screenshot
const screenshotBuffer = await page.screenshot({ type: 'png' })
await browser.close()
// Tell the consuming service to cache the image being sent
res.setHeader('Cache-Control', `public, immutable, no-transform, s-maxage=31536000, max-age=31536000`)
res.setHeader('Content-Type', 'image/png')
res.status(200).send(screenshotBuffer)
}
이 점을 보려면 executablePath
을 Chromium 브라우저 기반의 로컬 실례로 변경해야 합니다.그리고 localhost:3000/api/generate-og?title=Hello%20World
에 방문하면 이전과 똑같은 레이아웃을 볼 수 있습니다. 단지 지금은 PNG 이미지입니다.전송된
title
텍스트의 레이아웃을 불러오고 캡처하며 사용할 수 있는 그림을 되돌려줍니다.이 점에서 코드를 배치하고 모든 것이 예상대로 실행될 수 있도록 하는 것은 좋은 생각이다.무료 Vercel 계정이 필요합니다. 그리고 in Vercel을 설정하거나 Vercel CLI을 사용하여 터미널에서 신속하게 배치합니다.
> vercel
🔍 Inspect: https://vercel.com/your-org/opengraph-demo/************ [3s]
✅ Preview: https://opengraph-demo-app.vercel.app [copied to clipboard] [54s]
프로젝트 하위 도메인의 Open Graph API 경로를 탐색하십시오. 예를 들어 opengraph-demo-app.vercel.app/api/generate-og?title=This%20is%20working!
. Open Graph 이미지가 화면에 나타나는 것을 보실 수 있습니다.title
조회 매개 변수를 변경할 수 있습니다. 매번 새로운 그림을 생성할 수 있습니다.페이지에 이미지 링크
나머지는 이 서버가 없는 API를 가리키는 사이트 오픈 이미지를 찾는 모든 서비스입니다.
Open Graph는 메타데이터의 형식일 뿐이기 때문에 웹 HTML 제목에
<meta>
개의 태그로 정의됩니다.열린 도형 이미지의 경우 이 이미지는 원 property
, 즉 og:image
이고 이미지의 URL은 content
이다.NextJS 예시에서 새 페이지와 React 함수를 만들고 NextJS Head
구성 요소로 제목 항목을 추가합니다.import Head from 'next/head'
export default function Demo() {
return (
<div>
<Head>
<meta property='og:image' content='https://opengraph-demo-app.vercel.app/api/generate-og?title=This%20is%20the%20Demo%20Page' />
</Head>
<div className='flex h-full justify-center items-center'>
<h1 className='text-4xl'>Hello World!</h1>
<p>This page is a demo for Open Graph images!</p>
</div>
</div>
)
}
따라서 이러한 작업의 전체 프로세스는 다음과 같습니다.활기차게 해주세요.
이 단계는 프로젝트에 따라 다르지만 핵심 설정은 같다.열린 그래픽 이미지를 동적으로 만들려면
title
태그에서 동적 meta
값을 API에 전달해야 합니다.가장 간단한 방법은 리액트 함수에 도구를 전달하는 것이다.예를 들어, NextJS에서 dynamic routes을 작성하여 데이터베이스, CMS 또는 기타 리소스에서 블로그 게시물을 가져오고 제목을 추출하여 페이지 상단에 표시할 수 있습니다.동일한 머리글 값을 API에 전달하기만 하면 됩니다.이미지 옆에 열려 있는 그래픽 속성을 추가하는 것도 좋습니다.
import Head from 'next/head'
export default function BlogPost({post}) {
const ogImagePath = `https://opengraph-demo-app.vercel.app/api/generate-og?title=${post.title}`
return (
<div>
<Head>
<meta property='og:image' content={ogImagePath} />
<meta property='og:title' content={post.title} />
<meta property='og:description' content={post.description} />
<meta property='og:type' content='article' />
</Head>
<div className='flex h-full justify-center items-center'>
<h1 className='text-4xl'>{post.title}</h1>
<div>
{post.content}
</div>
</div>
</div>
)
}
export async function getStaticProps({ params }) {
const res = await fetch('https://.../posts')
const posts = await res.json()
const post = posts.filter((post) => post.title === params.slug).first
return {
props: {
post,
},
}
}
이렇게!Open Graph 이미지는 Open Graph 프로토콜을 사용하여 링크를 풍부하게 공유하는 모든 위치의 온라인 미리 보기에 표시됩니다.--prod
로고를 사용하여 프로젝트를 Vercel에 재배치하고 사이트 링크를 공유할 때 그 운행 상황을 확인하십시오.질문, 피드백 또는 채팅만 하고 싶으시면 GitHub으로 연락 주세요.
Reference
이 문제에 관하여(4단계만 수행하면 열린 그래픽 이미지 엔진을 만들 수 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ikartik/create-an-open-graph-image-engine-in-just-4-steps-1kdd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)