feat(member): 회원 썸네일 중앙 1대1 크롭 강제
아바타 업로드 시 원본 비율과 무관하게 중앙 기준 정사각형으로 크롭해 헤더와 설정 화면에서 일관된 1:1 썸네일이 노출되도록 맞춘다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -69,6 +69,7 @@ export default defineEventHandler(async (event) => {
|
||||
const avatarMinHeight = clampNumber(Number(config.avatarMinHeight || 96), 1, 4096)
|
||||
const avatarMaxWidth = clampNumber(Number(config.avatarMaxWidth || 512), avatarMinWidth, 4096)
|
||||
const avatarMaxHeight = clampNumber(Number(config.avatarMaxHeight || 512), avatarMinHeight, 4096)
|
||||
const avatarSquareSize = Math.min(avatarMaxWidth, avatarMaxHeight)
|
||||
const avatarWebpQuality = clampNumber(Number(config.avatarWebpQuality || 82), 1, 100)
|
||||
const formData = await readMultipartFormData(event)
|
||||
const file = (formData || []).find((part) => part.name === 'file' && part.filename)
|
||||
@@ -126,10 +127,10 @@ export default defineEventHandler(async (event) => {
|
||||
const resizedBuffer = await sharp(file.data)
|
||||
.rotate()
|
||||
.resize({
|
||||
width: avatarMaxWidth,
|
||||
height: avatarMaxHeight,
|
||||
fit: 'inside',
|
||||
withoutEnlargement: true
|
||||
width: avatarSquareSize,
|
||||
height: avatarSquareSize,
|
||||
fit: 'cover',
|
||||
position: 'centre'
|
||||
})
|
||||
.webp({
|
||||
quality: avatarWebpQuality
|
||||
|
||||
Reference in New Issue
Block a user