Hướng dẫn Nhà phát triển PlacePix
Tài liệu tham khảo API đầy đủ và tài liệu chức năng cho dịch vụ hình ảnh placeholder tự lưu trữ. Bao gồm triển khai Docker, cắt ảnh thông minh, placeholder chuyển màu, tạo SVG, avatar chữ cái và cấu hình trước mạng xã hội.
PlacePix là gì?
PlacePix là dịch vụ hình ảnh placeholder tự lưu trữ được xây dựng cho nhà phát triển và đội ngũ thiết kế. Không giống như các dịch vụ placeholder bên thứ ba yêu cầu các cuộc gọi mạng bên ngoài và có thể biến mất, PlacePix chạy hoàn toàn trên cơ sở hạ tầng của riêng bạn. Thả hình ảnh vào thư mục, và ngay lập tức nhận được các endpoint URL phục vụ hình ảnh đã thay đổi kích thước, được lọc và định dạng.
Dịch vụ được viết bằng Python sử dụng FastAPI với xử lý hình ảnh được cung cấp bởi Pillow và OpenCV. Nó hỗ trợ triển khai Docker, và lưu trữ đối tượng tương thích với S3.
Tính năng
- Cấu hình zero — thả hình ảnh vào thư mục và chạy
- Cắt ảnh nhận diện khuôn mặt — OpenCV phát hiện và căn giữa khuôn mặt
- Placeholder gradient và SVG — không cần hình ảnh
- Cấu hình sẵn mạng xã hội — kích thước Instagram, YouTube, TikTok tích hợp
- Tìm kiếm theo màu — tìm hình ảnh phù hợp với bảng màu thương hiệu của bạn
- Avatar chữ cái — hình ảnh hồ sơ xác định từ tên
Hướng dẫn triển khai Docker
Cách nhanh nhất để chạy PlacePix là với Docker. Một lệnh duy nhất triển khai toàn bộ dịch vụ với quét thông minh, trích xuất màu sắc, và trình tạo URL nhúng.
Triển khai một dòng
docker run -d -p 3000:3000 \
-v ./images:/app/images \
riadvice/placepix:latest
Docker Compose (Khuyến nghị)
services:
placepix:
image: riadvice/placepix:latest
ports:
- "3000:3000"
volumes:
- ./images:/app/images
- ./data:/app/data
environment:
- HOST=0.0.0.0:3000
- UPLOAD_ENABLED=true
- WATERMARK_ENABLED=false
restart: unless-stopped
Dữ liệu liên tục và Môi trường
Mount both /app/images (your image library) and /app/data (scan cache and metadata) to preserve state across container restarts. Configure behavior via environment variables or a .env file.
Lưu trữ tương thích S3 OVHcloud
PlacePix supports any S3-compatible backend. For OVHcloud Object Storage, set:
S3_ENABLED=true
S3_ENDPOINT=https://s3.rbx.io.cloud.ovh.net
S3_ACCESS_KEY=your-key
S3_SECRET_KEY=your-secret
S3_BUCKET=your-bucket
S3_REGION=rbx
Cắt ảnh thông minh nhận diện khuôn mặt
Cắt ảnh trung tâm tiêu chuẩn có thể cắt xuyên qua khuôn mặt trong nhiếp ảnh chân dung. PlacePix giải quyết điều này bằng cắt ảnh thông minh nhận diện khuôn mặt được cung cấp bởi các khoảng Haar của OpenCV.
Cách thức hoạt động
Khi một yêu cầu bao gồm ?fit=smart, PlacePix quét hình ảnh để tìm khuôn mặt người bằng OpenCV. Nếu phát hiện khuôn mặt, cửa sổ cắt sẽ được chuyển để tâm khuôn mặt nằm gần nhất có thể với các điểm giao của tỷ lệ vàng. Nếu không tìm thấy khuôn mặt, nó sẽ quay lại cắt trung tâm tiêu chuẩn.
Ví dụ API
# Face-aware crop (detects and centers faces)
/400/300/people?fit=smart
# Standard center crop
/400/300/people?fit=crop
# Cover fill (may stretch)
/400/300/people?fit=cover
# Contain (letterboxing)
/400/300/people?fit=contain
Khi nào sử dụng cắt ảnh thông minh
- Nhiếp ảnh chân dung và ảnh đầu
- Trang nhóm nơi khuôn mặt quan trọng
- Hình thu nhỏ mạng xã hội
- Bất kỳ kịch bản nào trong đó cắt trung tâm hình học làm hỏng bố cục
API Placeholder Chuyển Màu
Tạo hình ảnh gradient tuyến tính và radial ngay lập tức mà không cần tải lên bất kỳ tài sản nào. Hoàn hảo cho nền hero, trạng thái loading và mockup thiết kế.
Cú pháp endpoint
/gradient/{width}/{height}/{from_hex}/{to_hex}
Ví dụ
# Simple linear gradient (top to bottom)
/gradient/800/400/3b82f6/10b981
# 45-degree angled gradient
/gradient/800/400/e11d48/f59e0b?angle=45
# Radial gradient from center
/gradient/800/400/1e293b/64748b?gradient_type=radial
# With output format
/gradient/800/400/0ea5e9/ffffff?format=webp&quality=80
Tham chiếu tham số
{from_hex}/{to_hex}— màu hex không có tiền tố #?angle=45— góc tuyến tính tính bằng độ (0-360)?gradient_type=radial— switches to radial gradient?format=webp— WebP output (smaller file size)
Trình Tạo Placeholder SVG
SVG placeholders không yêu cầu xử lý hình ảnh phía máy chủ. Chúng được tạo dưới dạng inline SVG với màu nền, màu chữ và nhãn văn bản có thể tùy chỉnh.
Endpoint
/svg/{width}/{height}?bg={hex}&fg={hex}&text={label}
Ví dụ
# Default wireframe placeholder
/svg/400/300
# Custom brand colors
/svg/400/300?bg=1c1917&fg=0ea5e9
# With custom text
/svg/400/300?bg=0ea5e9&fg=ffffff&text=Hero+Section
Tại sao SVG?
- Kích thước tệp dưới 500 byte
- Vô hạn khả năng mở rộng không mất chất lượng
- Không có chi phí xử lý máy chủ
- Hoàn hảo cho wireframes và nguyên mẫu độ trung thực thấp
Cấu hình trước mạng xã hội
PlacePix bao gồm các kích thước được xác định trước cho các nền tảng xã hội phổ biến và kích thước màn hình. Sử dụng chúng để tạo hình ảnh placeholder có kích thước hoàn hảo cho Instagram, YouTube, TikTok, LinkedIn, X (Twitter) và màn hình tiêu chuẩn.
/preset/instagram-square/nature # 1080x1080
/preset/instagram-portrait/nature # 1080x1350
/preset/instagram-story/nature # 1080x1920
YouTube
/preset/youtube-thumbnail/nature # 1280x720
/preset/youtube-banner/nature # 2560x423
TikTok
/preset/tiktok-video/nature # 1080x1920 (9:16)
/preset/linkedin-post/nature # 1200x627
X (Twitter)
/preset/twitter-header/nature # 1500x500
Kích thước Màn hình
/preset/mobile/nature # 375x812
/preset/tablet/nature # 768x1024
/preset/desktop/nature # 1920x1080
/preset/4k/nature # 3840x2160
Trường hợp sử dụng đặc biệt: API Instagram Story
Nếu bạn đang xây dựng công cụ quản lý mạng xã hội và cần hình ảnh placeholder kích thước Instagram story, hãy sử dụng /preset/instagram-story/{category}. Kết hợp với ?fit=smart cho ảnh chân dung và ?format=webp&quality=70 để tối ưu việc phân phối.
Lọc theo Hướng
Lọc hình ảnh ngẫu nhiên theo tỷ lệ khung hình gốc của chúng trước khi chọn. Điều này hữu ích khi bạn cần hình ảnh tự nhiên phù hợp với bố cục — ngang cho tiêu đề, dọc cho thẻ hoặc vuông cho hình thu nhỏ.
Điểm cuối
# Landscape images (width > height)
/400/300?orientation=landscape
# Portrait images (height > width)
/400/300?orientation=portrait
# Squarish images (within 15% of 1:1 by default)
/400/300?orientation=squarish
# Combined with other filters
/400/300/nature?orientation=landscape&seed=spring
/color/0ea5e9/400/300?orientation=portrait
/api/color/3b82f6?orientation=landscape
Cấu hình
Độ dung sai squarish có thể cấu hình thông qua biến môi trường ORIENTATION_SQUARISH_TOLERANCE (mặc định: 0.15). Giá trị 0.15 có nghĩa là hình ảnh có tỷ lệ khung hình từ 0.85 đến 1.15 được coi là vuông. Đặt thành 0.0 cho 1:1 chính xác.
Cách thức hoạt động
PlacePix đọc kích thước hình ảnh từ tiêu đề tệp trong quá trình quét ban đầu (tệp cục bộ) và trong quá trình quét siêu dữ liệu nền (hình ảnh S3). Kích thước được lưu trữ trong bộ nhớ và được sử dụng để lọc nhóm ứng viên trước khi chọn ngẫu nhiên hoặc chọn theo seed. Nếu yêu cầu hướng nhưng không có hình ảnh phù hợp, 404 được trả về.
Bộ lọc và Hiệu ứng
Áp dụng bộ lọc và hiệu ứng real-time cho bất kỳ hình ảnh nào thông qua tham số truy vấn. Tất cả xử lý được thực hiện phía máy chủ và được lưu cache cho các yêu cầu tiếp theo.
Điều chỉnh Màu sắc
?grayscale=1 # Đen trắng
?sepia=1 # Tông sepia ấm
?tint=0ea5e9 # Lớp phủ màu hex
?brightness=1.3 # 0.0 đến 2.0
?contrast=1.2 # 0.0 đến 2.0
?saturation=2.0 # 0.0 đến 2.0
?invert=true # Đảo màu
?posterize=4 # Mức độ màu (1-8)
?duotone=ff0000,0000ff # Bản đồ hai màu
Hiệu ứng Hình ảnh
?blur=2 # Làm mờ Gaussian (1-10)
?sharpen=1.5 # Mức độ làm nét
?emboss=true # Nổi 3D
?edges=sobel # Phát hiện cạnh
?edges=canny # Cạnh Canny
?halftone=4 # Kiểu chấm
?oil_painting=true # Phong cách tranh sơn dầu
?pencil_sketch=true # Phác thảo bút chì
?cartoon=true # Hiệu ứng hoạt hình
?vignette=0.5 # Làm tối viền (0-1)
Tham số Overlay
?text=Hello+World # Lớp phủ văn bản
?border=4,ffffff # Chiều rộng & màu viền
?watermark=1 # Áp dụng watermark đã cấu hình
?padding=20 # Khoảng đệm bên trong
Trình Tạo Avatar
Tạo avatar xác định từ bất kỳ tên hoặc email nào. PlacePix hỗ trợ hai loại avatar: Avatar chữ cái (chữ cái đầu màu sắc) và Multiavatar (avatar vector đa văn hóa).
Endpoint
/avatar/{size}/{name}
/avatar/{size}/{name}.{ext}
Tham số
type— avatar type:letter(default) ormultiavatarsize— pixel size (e.g.64,128,256)name— any string; used as seed for the avatar
Avatar chữ cái (type=letter)
circle— crop to a circle shapeborder={width}— thêm viềnborder_color={hex}— màu viềnbg={hex}— override background colorfg={hex}— override text/foreground colorsingle=true— use only the first letteruppercase=false— preserve lowercase letterspalette={name}— choose fromflatui,material,pastel,neon,cool,warm
Multiavatar (type=multiavatar)
env— include environment background (trueby default,falseto omit)part— specific part code (optional, e.g.11)theme— specific theme code (optional, e.g.C)
Ví dụ
# Simple 128px letter avatar
/avatar/128/John+Doe
# Circle letter avatar with custom border
/avatar/128/John+Doe?circle=true&border=2&border_color=ffffff
# Single initial, pastel palette
/avatar/64/Alice?single=true&palette=pastel
# SVG letter output (scalable, under 500 bytes)
/avatar/128/John+Doe.svg
# Multiavatar (multicultural vector avatar)
/avatar/128/Binx+Bond?type=multiavatar
# Multiavatar without environment background
/avatar/128/Binx+Bond?type=multiavatar&env=false
# Specific multiavatar version
/avatar/128/Binx+Bond?type=multiavatar&part=11&theme=C
Tại sao sử dụng avatar chữ cái?
- Không có phụ thuộc bên ngoài — không có Gravatar hay dịch vụ avatar bên thứ ba
- Xác định — cùng một tên luôn tạo ra cùng một màu
- Hỗ trợ SVG — có thể mở rộng vô hạn, hoàn hảo cho màn hình HiDPI
- Sáu bảng màu tích hợp cho mọi thẩm mỹ thương hiệu
Tại sao sử dụng Multiavatar?
- 12 tỷ avatar đa văn hóa duy nhất
- Xác định — cùng một tên luôn tạo ra cùng một avatar
- Đầu ra SVG thuần — kích thước tệp nhỏ, có thể mở rộng vô hạn
- Không cần gọi API bên ngoài
Tài liệu tham khảo nhanh REST API
Tất cả các endpoint đều hỗ trợ CORS và trả về hình ảnh với header cache dài hạn. Đầu ra Base64 JSON có sẵn cho thumbnail nhỏ.
Endpoint Hình ảnh
GET /{width}/{height}/{category}— Hình ảnh ngẫu nhiên từ danh mụcGET /{width}/{height}— Hình ảnh ngẫu nhiên từ tất cả danh mụcGET /id/{id}/{width}/{height}— Hình ảnh cụ thể theo IDGET /ratio/{ratio}/{width}/{category}— Hình ảnh tỷ lệ khung hìnhGET /preset/{preset}/{category}— Preset mạng xã hộiGET /color/{hex}/{width}/{height}— Hình ảnh khớp màuGET /gradient/{w}/{h}/{from}/{to}— Hình ảnh gradientGET /svg/{width}/{height}— SVG placeholderGET /avatar/{size}/{name}— Avatar chữ cái (PNG/SVG)
Endpoint Metadata
GET /api/images— Liệt kê danh mục và tổng sốGET /api/info/id/{id}— Metadata hình ảnh (kích thước, màu sắc, định dạng)GET /api/color/{hex}— Hình ảnh khớp với một màu
Endpoint Health
GET /health— Kiểm tra liveness (Docker/K8s)GET /ready— Kiểm tra readiness (503 cho đến khi hình ảnh được tải)
Chuyên môn và chứng chỉ
- Những người đóng góp tích cực cho hệ sinh thái open-source từ năm 2008
- Toàn bộ mã nguồn mở theo Giấy phép MIT và có thể kiểm toán trên GitHub
Câu hỏi thường gặp
Làm thế nào để triển khai PlacePix với Docker?
Chạy docker run -d -p 3000:3000 -v ./images:/app/images riadvice/placepix:latest. Mount thư mục hình ảnh của bạn và dịch vụ sẽ khởi động ngay lập tức với quét thông minh được bật.
Cắt ảnh thông minh nhận diện khuôn mặt là gì?
PlacePix sử dụng OpenCV Haar cascades để phát hiện khuôn mặt trong hình ảnh. Khi bạn thêm ?fit=smart vào bất kỳ URL nào, vùng cắt được chuyển để tập trung vào khuôn mặt được phát hiện thay vì sử dụng trung tâm hình học. Nếu không tìm thấy khuôn mặt, nó sẽ quay lại cắt trung tâm tiêu chuẩn.
Tôi có thể tạo hình ảnh placeholder gradient mà không cần tải lên ảnh không?
Có. Endpoint /gradient/{width}/{height}/{from}/{to} tạo hình ảnh gradient hoàn toàn từ các tham số URL. Không cần tải lên hình ảnh. Bạn cũng có thể tạo placeholder SVG với /svg/{width}/{height}.
Làm thế nào để tạo hình ảnh placeholder kích thước Instagram story qua API?
Sử dụng endpoint preset: /preset/instagram-story/{category}. Điều này trả về hình ảnh 1080x1920. Kết hợp với ?format=webp&quality=70 để tối ưu việc phân phối và ?fit=smart để cắt chân dung an toàn.
PlacePix có hỗ trợ lưu trữ đối tượng tương thích S3 không?
Có. PlacePix hoạt động với OVHcloud Object Storage, AWS S3, MinIO và bất kỳ nhà cung cấp tương thích S3 nào. Cấu hình endpoint, bucket, khóa truy cập và khóa bí mật qua các biến môi trường.
Định dạng đầu ra nào được hỗ trợ?
WebP, AVIF, JPEG, PNG, SVG và base64 JSON. Sử dụng .webp, .avif hoặc .png làm phần mở rộng tệp, hoặc thêm ?format=webp làm tham số truy vấn. AVIF tạo ra các tệp nhỏ nhất; PNG là lossless.
PlacePix có miễn phí cho sử dụng thương mại không?
Có. PlacePix được phát hành theo Giấy phép MIT và miễn phí cho cả sử dụng cá nhân và thương mại. Vì nó là self-hosted, không có giới hạn sử dụng, không có khóa API và không có thanh toán theo yêu cầu.