راهنمای توسعهدهنده PlacePix
مرجع API کامل و مستندات ویژگیها برای سرویس تصویر placeholder خودمیزبان. پوشش استقرار Docker، برش هوشمند، placeholder gradient، تولید SVG، آواتارهای حرفی و presetهای رسانههای اجتماعی.
PlacePix چیست؟
PlacePix یک سرویس تصویر placeholder خودمیزبان است که برای توسعهدهندگان و تیمهای طراحی ساخته شده است. برخلاف سرویسهای placeholder شخص ثالث که نیاز به فراخوانیهای شبکه خارجی دارند و ممکن است ناپدید شوند، PlacePix کاملاً بر روی زیرساخت خود شما اجرا میشود. تصاویر را در پوشهها رها کنید و بلافاصله نقاط پایانی URL دریافت کنید که تصاویر تغییر اندازه یافته، فیلتر شده و قالببندی شده را ارائه میدهند.
این سرویس با استفاده از Python و FastAPI نوشته شده است با پردازش تصویر توسط Pillow و OpenCV. از استقرار Docker و ذخیرهسازی شیء سازگار با S3 پشتیبانی میکند.
ویژگیها
- پیکربندی صفر — تصاویر را در پوشهها رها کنید و بروید
- برش هوشمند تشخیص چهره — OpenCV چهرهها را تشخیص میدهد و در مرکز قرار میدهد
- Placeholder gradient و SVG — نیازی به تصویر نیست
- Presetهای رسانههای اجتماعی — اندازههای اینستاگرام، یوتیوب، تیکتاک داخلی
- جستجوی رنگ — تصاویری را پیدا کنید که با پالت برند شما مطابقت دارند
- آواتارهای حرفی — تصاویر پروفایل قطعی از نامها
راهنمای استقرار Docker
سریعترین راه برای اجرای PlacePix با Docker است. یک دستور واحد کل سرویس را با اسکن هوشمند، استخراج رنگ و سازنده URL تعبیه شده مستقر میکند.
استقرار تکخطی
docker run -d -p 3000:3000 \
-v ./images:/app/images \
riadvice/placepix:latest
Docker Compose (توصیه شده)
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
دادههای پایدار و محیط
هر دو /app/images (کتابخانه تصاویر شما) و /app/data (کش اسکن و متاداده) را mount کنید تا وضعیت در راهاندازیهای مجدد کانتینر حفظ شود. رفتار را از طریق متغیرهای محیطی یا فایل .env پیکربندی کنید.
ذخیرهسازی سازگار با S3 OVHcloud
PlacePix از هر بکاند سازگار با S3 پشتیبانی میکند. برای OVHcloud Object Storage، تنظیم کنید:
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
برش هوشمند تشخیص چهره
برش مرکز استاندارد میتواند در عکاسی پرتره از چهرهها عبور کند. PlacePix این را با برش هوشمند تشخیص چهره که توسط آبشارهای Haar OpenCV تقویت شده است، حل میکند.
نحوه کار
وقتی یک درخواست شامل ?fit=smart باشد، PlacePix تصویر را برای چهرههای انسان با استفاده از OpenCV اسکن میکند. اگر چهرهها تشخیص داده شوند، پنجره برش جابجا میشود تا مرکز چهره تا حد امکان به نقاط تقاطع نسبت طلایی نزدیک باشد. اگر چهرهای پیدا نشد، به برش مرکز استاندارد بازمیگردد.
نمونههای API
# برش تشخیص چهره (چهرهها را تشخیص میدهد و در مرکز قرار میدهد)
/400/300/people?fit=smart
# برش مرکز استاندارد
/400/300/people?fit=crop
# پر کردن cover (ممکن است کشیده شود)
/400/300/people?fit=cover
# Contain (letterboxing)
/400/300/people?fit=contain
چه زمانی از برش هوشمند استفاده کنید
- عکاسی پرتره و headshot
- صفحات تیم که در آن چهرهها مهم هستند
- تصاویر کوچک رسانههای اجتماعی
- هر سناریویی که برش مرکز هندسی ترکیببندی را خراب میکند
API Placeholder Gradient
تصاویر gradient خطی و شعاعی را بدون آپلود هیچ assetای تولید کنید. عالی برای پسزمینههای hero، حالتهای بارگذاری و mockupهای طراحی.
سینتکس نقطه پایانی
/gradient/{width}/{height}/{from_hex}/{to_hex}
نمونهها
# Gradient خطی ساده (بالا به پایین)
/gradient/800/400/3b82f6/10b981
# Gradient زاویهدار ۴۵ درجه
/gradient/800/400/e11d48/f59e0b?angle=45
# Gradient شعاعی از مرکز
/gradient/800/400/1e293b/64748b?gradient_type=radial
# با فرمت خروجی
/gradient/800/400/0ea5e9/ffffff?format=webp&quality=80
مرجع پارامترها
{from_hex}/{to_hex}— رنگهای hex بدون پیشوند #?angle=45— زاویه خطی به درجه (۰-۳۶۰)?gradient_type=radial— تولید gradient شعاعی?format=webp— خروجی WebP، AVIF، JPEG، PNG
تولیدکننده Placeholder SVG
placeholderهای برداری Scalable را با ابعاد دقیق و رنگهای hex سفارشی ایجاد کنید. SVGها زیر ۵۰۰ بایت باقی میمانند و در هر DPI بینهایت sharp هستند.
نحو URL
/svg/{width}/{height}
/svg/{width}/{height}/{bg_hex}/{fg_hex}
نمونهها
# Placeholder پیشفرض
/svg/400/300
# با رنگهای سفارشی
/svg/400/300/1e293b/ffffff
# به عنوان فایل SVG با پسوند
/svg/400/300.svg
پارامترهای رشته پرسوجو
?bg=1e293b— رنگ پسزمینه?fg=ffffff— رنگ متن/foreground?text=Hello— متن روی placeholder?font=monospace— فونت CSS?radius=8— شعاع گوشه گرد
Presetهای رسانههای اجتماعی
URLهای از پیش تعریف شده برای اندازههای رایج شبکههای اجتماعی. کافی است /preset/{name}/{category} را درخواست کنید.
اینستاگرام
/preset/instagram-post/nature # ۱۰۸۰x۱۰۸۰
/preset/instagram-story/nature # ۱۰۸۰x۱۹۲۰
/preset/instagram-reel/nature # ۱۰۸۰x۱۹۲۰
یوتیوب
/preset/youtube-thumbnail/nature # ۱۲۸۰x۷۲۰
/preset/youtube-banner/nature # ۲۵۶۰x۱۴۴۰
تیکتاک
/preset/tiktok-video/nature # ۱۰۸۰x۱۹۲۰
لینکدین
/preset/linkedin-post/nature # ۱۲۰۰x۶۲۷
ایکس (توییتر)
/preset/twitter-header/nature # ۱۵۰۰x۵۰۰
اندازههای صفحه نمایش
/preset/mobile/nature # ۳۷۵x۸۱۲
/preset/tablet/nature # ۷۶۸x۱۰۲۴
/preset/desktop/nature # ۱۹۲۰x۱۰۸۰
/preset/4k/nature # ۳۸۴۰x۲۱۶۰
مورد استفاده Long-Tail: Instagram Story API
اگر در حال ساخت یک ابزار مدیریت رسانههای اجتماعی هستید و به تصاویر placeholder سایز اینستاگرام استوری نیاز دارید، از /preset/instagram-story/{category} استفاده کنید. با ?fit=smart برای عکسهای پرتره و ?format=webp&quality=70 برای تحویل بهینه ترکیب کنید.
فیلتر جهت
قبل از انتخاب، تصاویر تصادفی را بر اساس نسبت ابعاد اصلی فیلتر کنید. این زمانی مفید است که به تصاویری نیاز دارید که به طور طبیعی در یک طرح قرار میگیرند — افقی برای سرصفحهها، عمودی برای کارتها یا مربعی برای تصاویر بندانگشتی.
نقاط پایانی
# 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
پیکربندی
تحمل squarish از طریق متغیر محیطی ORIENTATION_SQUARISH_TOLERANCE قابل پیکربندی است (پیشفرض: 0.15). مقدار 0.15 به این معناست که تصاویر با نسبت ابعاد بین 0.85 و 1.15 مربعی در نظر گرفته میشوند. برای دقیقاً 1:1، مقدار 0.0 تنظیم کنید.
نحوه کار
PlacePix ابعاد تصاویر را از سرصفحههای فایل در طول اسکن اولیه (فایلهای محلی) و در طول اسکن فراداده در پسزمینه (تصاویر S3) میخواند. ابعاد در حافظه ذخیره میشوند و برای فیلتر کردن مجموعه نامزدها قبل از انتخاب تصادفی یا تعیینشده استفاده میشوند. اگر جهتی درخواست شود اما هیچ تصویری مطابقت نداشته باشد، 404 بازگردانده میشود.
API جستجوی رنگ
هر تصویر در PlacePix برای ۳ رنگ غالب برتر اسکن میشود. شما میتوانید کل کتابخانه را بر اساس رنگ hex جستجو کنید تا تصاویری را پیدا کنید که با پالت برند شما مطابقت دارند.
نقاط پایانی
# دریافت تصویری که با رنگ hex خاصی مطابقت دارد
/color/0ea5e9/400/300
# فیلتر هر نقطه پایانی بر اساس رنگ غالب
/400/300/nature?color=d97706
# لیست همه تصاویر مطابق با یک رنگ
/api/color/3b82f6
نحوه کار اسکن رنگ
در راهاندازی، PlacePix رنگهای پرتکرار را از هر تصویر با استفاده از خوشهبندی k-means در فضای رنگ LAB استخراج میکند. این تطابقهای دقیق از نظر ادراکی را تولید میکند نه میانگینهای RGB خام. صفحه پالت (/palette) این رنگها را تجسم میکند و به شما اجازه میدهد بر اساس دسته رنگ مرور کنید.
فیلترها و افکتها
فیلترها و افکتهای real-time را از طریق پارامترهای پرسوجو به هر تصویری اعمال کنید. تمام پردازش در سمت سرور انجام میشود و برای درخواستهای بعدی کش میشود.
تنظیمات رنگ
?grayscale=1 # سیاه و سفید
?sepia=1 # تون sepia گرم
?tint=0ea5e9 # پوشش رنگ hex
?brightness=1.3 # ۰.۰ تا ۲.۰
?contrast=1.2 # ۰.۰ تا ۲.۰
?saturation=2.0 # ۰.۰ تا ۲.۰
?invert=true # معکوس کردن رنگها
?posterize=4 # سطوح رنگ (۱-۸)
?duotone=ff0000,0000ff # نقشه دو رنگی
افکتهای تصویر
?blur=2 # Gaussian blur (۱-۱۰)
?sharpen=1.5 # میزان sharpening
?emboss=true # برجستگی ۳ بعدی
?edges=sobel # تشخیص لبه
?edges=canny # لبههای Canny
?halftone=4 # الگوی نقطهای
?oil_painting=true # سبک نقاشی روغنی
?pencil_sketch=true # طرح مدادی
?cartoon=true # افکت کارتونی
?vignette=0.5 # تاریک کردن لبهها (۰-۱)
پارامترهای Overlay
?text=Hello+World # پوشش متن
?border=4,ffffff # عرض و رنگ border
?watermark=1 # اعمال watermark پیکربندی شده
?padding=20 # padding داخلی
تولیدکننده آواتار
آواتارهای قطعی را از هر نام یا ایمیلی تولید کنید. PlacePix از دو نوع آواتار پشتیبانی میکند: آواتار حرفی (حروف اول رنگی) و Multiavatar (آواتارهای برداری چندفرهنگی).
نقطه پایانی
/avatar/{size}/{name}
/avatar/{size}/{name}.{ext}
پارامترها
type— avatar type:letter(default) ormultiavatarsize— pixel size (e.g.64,128,256)name— any string; used as seed for the avatar
آواتار حرفی (type=letter)
circle— crop to a circle shapeborder={width}— اضافه کردن حاشیهborder_color={hex}— رنگ حاشیهbg={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)
نمونهها
# 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
چرا از آواتارهای حرفی استفاده کنیم؟
- بدون وابستگی خارجی — بدون Gravatar یا سرویس آواتار شخص ثالث
- قطعی — همان نام همیشه همان رنگ را تولید میکند
- پشتیبانی از SVG — قابل مقیاسبندی نامحدود، مناسب برای نمایشگرهای HiDPI
- شش پالت رنگ داخلی برای هر زیباییشناسی برند
چرا از Multiavatar استفاده کنیم؟
- 12 میلیارد آواتار چندفرهنگی منحصربهفرد
- قطعی — همان نام همیشه همان آواتار را تولید میکند
- خروجی SVG خالص — حجم فایل کوچک، قابل مقیاسبندی نامحدود
- بدون نیاز به فراخوانی API خارجی
مرجع سریع REST API
همه نقاط پایانی از CORS پشتیبانی میکنند و تصاویر را با هدرهای کش بلندمدت برمیگردانند. خروجی JSON Base64 برای تصاویر کوچک در دسترس است.
نقاط پایانی تصویر
GET /{width}/{height}/{category}— تصویر تصادفی از دستهGET /{width}/{height}— تصویر تصادفی از همه دستههاGET /id/{id}/{width}/{height}— تصویر خاص بر اساس IDGET /ratio/{ratio}/{width}/{category}— تصویر نسبت ابعادGET /preset/{preset}/{category}— preset رسانه اجتماعیGET /color/{hex}/{width}/{height}— تصویر مطابق با رنگGET /gradient/{w}/{h}/{from}/{to}— تصویر gradientGET /svg/{width}/{height}— placeholder SVGGET /avatar/{size}/{name}— آواتار حرفی (PNG/SVG)
نقاط پایانی متاداده
GET /api/images— لیست دستهها و مجموعهاGET /api/info/id/{id}— متاداده تصویر (ابعاد، رنگها، فرمت)GET /api/color/{hex}— تصاویر مطابق با یک رنگ
نقاط پایانی سلامت
GET /health— بررسی زنده بودن (Docker/K8s)GET /ready— بررسی آماده بودن (۵۰۳ تا زمانی که تصاویر بارگذاری شوند)
تخصص و اعتبار
- مشارکتکنندگان فعال در اکوسیستم متن باز از سال ۲۰۰۸
- تمام کد متن باز تحت مجوز MIT و قابل حسابرسی در GitHub
سوالات متداول
چگونه PlacePix را با Docker مستقر کنم؟
docker run -d -p 3000:3000 -v ./images:/app/images riadvice/placepix:latest را اجرا کنید. پوشه تصاویر خود را mount کنید و سرویس بلافاصله با اسکن هوشمند فعال شروع به کار میکند.
برش هوشمند تشخیص چهره چیست؟
PlacePix از آبشارهای Haar OpenCV برای تشخیص چهره در تصاویر استفاده میکند. وقتی ?fit=smart را به هر URL اضافه میکنید، ناحیه برش به مرکز چهرههای تشخیص داده شده جابجا میشود نه استفاده از مرکز هندسی. اگر چهرهای پیدا نشد، به برش مرکز استاندارد بازمیگردد.
آیا میتوانم تصاویر placeholder gradient بدون آپلود عکس تولید کنم؟
بله. نقطه پایانی /gradient/{width}/{height}/{from}/{to} تصاویر gradient را کاملاً از پارامترهای URL تولید میکند. هیچ تصویر آپلود شدهای لازم نیست. شما همچنین میتوانید با /svg/{width}/{height} placeholder SVG ایجاد کنید.
چگونه تصاویر placeholder سایز اینستاگرام استوری را از طریق API تولید کنم؟
از نقطه پایانی preset استفاده کنید: /preset/instagram-story/{category}. این یک تصویر ۱۰۸۰x۱۹۲۰ برمیگرداند. با ?format=webp&quality=70 برای تحویل بهینه و ?fit=smart برای برش ایمن پرتره ترکیب کنید.
آیا PlacePix از ذخیرهسازی شیء سازگار با S3 پشتیبانی میکند؟
بله. PlacePix با OVHcloud Object Storage، AWS S3، MinIO و هر ارائهدهنده سازگار با S3 کار میکند. نقطه پایانی، bucket، کلید دسترسی و کلید مخفی را از طریق متغیرهای محیطی پیکربندی کنید.
چه فرمتهای خروجی پشتیبانی میشوند؟
WebP، AVIF، JPEG، PNG، SVG و JSON base64. از .webp، .avif یا .png به عنوان پسوند فایل استفاده کنید، یا ?format=webp را به عنوان پارامتر پرسوجو اضافه کنید. AVIF کوچکترین فایلها را تولید میکند؛ PNG بدون اتلاف است.
آیا PlacePix برای استفاده تجاری رایگان است؟
بله. PlacePix تحت مجوز MIT منتشر شده و برای استفاده شخصی و تجاری رایگان است. از آنجا که self-hosted است، هیچ محدودیت استفاده، هیچ کلید API و هیچ صورتحساب per-request وجود ندارد.