Homelab - أداة ضغط صور عالية الجودة TinyPNG-docker
TinyPNG-docker هي أداة تستخدم واجهة برمجة التطبيقات (API) لـ TinyPNG لضغط الصور عالية الجودة. يمكنها ضغط صور WEBP وJPEG وPNG في المسار المحدد تلقائيًا ، ثم إخراجها في المسار الذي تريده. يمكنها تقليل استخدام عرض النطاق الترددي وحجم البيانات ووقت التحميل للموقع بشكل فعال. بالمناسبة ، هذا هو تطبيق Docker الذي طورته باستخدام ChatGPT.
التنصيب (Docker Compose)
أولاً ، قم بإنشاء compose.yaml
واستبدل ${DIR}
بالمسار المحلي (مثل /DATA/AppData
) ؛ استبدل ${API}
بمفتاح TinyPNG الخاص بك:
version: "3"
services:
tinypng-docker:
image: linyuxuanlin/tinypng-docker
environment:
- TINYPNG_API_KEY=${API}
- INPUT_DIR=/app/input
- OUTPUT_DIR=/app/output
volumes:
- ${DIR}/tinypng-docker/input:/app/input
- ${DIR}/tinypng-docker/output:/app/output
تعليمات التكوين
قبل استخدام هذا الحاوية Docker ، يجب أن تقوم بتسجيل حساب على موقع TinyPNG وطلب مفتاح API.
الاستخدام بسيط ، قم بنسخ الصور التي ترغب في ضغطها في مجلد ${DIR}/tinypng/input
، وستجد الصور المضغوطة في مجلد ${DIR}/tinypng/output
.
إذا لم يتمكن الحاوية من العمل بشكل صحيح ، يمكنك استبعاد الأسباب التالية:
- تأكد من أن مسار المجلد المحدد في ملف
compose.yaml
صحيح للمجلدينinput
وoutput
. - تحقق من حساب TinyPNG الخاص بك لمعرفة ما إذا كان قد تم الوصول إلى الحد الأقصى لعدد ضغطات المفتاح الخاص بك.
- تحقق مما إذا كان مجلد
input
يحتوي على ملفات صور بتنسيق صحيح (WebP و PNG و JPEG). لاحظ أن هذه الحاوية ستقوم بفحص وضغط الصور فقط عند حدوث حدثcreated
، لذا إذا كان الملف موجودًا بالفعل ، فيجب نقله يدويًا إلى المجلدinput
. - تحقق مما إذا كانت الصور المضغوطة تفقد جودتها بشكل أكبر من إعدادات ضغط API ، مما يمكن أن يؤدي إلى فشل فك تشفير API (على سبيل المثال ، إذا تم ضغط الصورة قبل الضغط الأولي).
- جرب استخدام أداة ضغط الصور المقدمة من موقع tinify يدويًا ، وقم بتحميل الصور المضغوطة لتحديد مكان المشكلة بشكل أفضل ، وفي الوقت نفسه ، يمكنك تحديد موقع المشكلة من خلال إخراج معلومات التصحيح في وحدة التحكم.
عملية تطوير صور Docker
الإعداد
-
إذا لم تكن قد سجلت حسابًا على Docker Hub بعد ، فيجب عليك إنشاء حساب على Docker Hub أولاً.
-
تسجيل الدخول إلى Docker Hub:
اتبع التعليمات وأدخل اسم المستخدم وكلمة المرور لتسجيل الدخول إلى Docker Hub.
إنشاء الحاوية
قم بإنشاء ملف Dockerfile
:
FROM python:3.8-slim-buster
RUN pip install tinify watchdog
WORKDIR /app
COPY . /app
ENV TINYPNG_API_KEY=<your_tinypng_api_key>
ENV INPUT_DIR=/app/input
ENV OUTPUT_DIR=/app/output
CMD ["python", "main.py"]
قم بإنشاء main.py
في نفس المسار:
import tinify
import os
import time
import sys
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_created(self, event):
if event.is_directory:
return None
elif event.event_type == 'created':
print("Received created event - %s." % event.src_path)
source_path = event.src_path
output_path = os.path.join(os.environ['OUTPUT_DIR'], os.path.basename(source_path))
compress_image(source_path, output_path)
def compress_image(source_path, output_path):
tinify.key = os.environ['TINYPNG_API_KEY']
source = tinify.from_file(source_path)
source.to_file(output_path)
print(f"{source_path} compressed and saved to {output_path}")
if __name__ == "__main__":
print("Watching for new images...")
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path=os.environ['INPUT_DIR'], recursive=False)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
أولاً، يتم استيراد المكتبات اللازمة للغة Python: tinify، os، time، sys، watchdog. ثم يتم تعريف فئة تسمى MyHandler ترث من FileSystemEventHandler في watchdog.events. تحتوي هذه الفئة على دالة تسمى on_created تُستدعى عند اكتشاف إنشاء ملف جديد في المجلد المحدد. تقوم دالة on_created بالحصول على مسار الصورة الأصلية وتقوم بضغطها وحفظها في المسار المحدد. أخيرًا، يتم البدء في مراقبة المجلد المحدد، وعند اكتشاف ملف جديد في المجلد، يتم تنفيذ عملية الضغط تلقائيًا وحفظ الصورة المضغوطة في المجلد المحدد.
بناء الحاوية
قم بتنفيذ الأمر التالي في نفس مسار Dockerfile
لبناء الحاوية:
حيث tingpng-docker
هو اسم الصورة التي سيتم بناؤها، و .
هو المسار الذي يحتوي على ملف Dockerfile
.
وضع علامة على الصورة
استخدم الأمر التالي لوضع علامة على الصورة:
مثال:
رفع الصورة إلى Docker Hub
استخدم الأمر التالي لرفع الصورة إلى Docker Hub:
على سبيل المثال:
سحب الصورة
بعد الرفع، يمكن للآخرين سحب الصورة باستخدام الأمر التالي:
المراجع والشكر
عنوان النص: https://wiki-power.com/
يتم حماية هذا المقال بموجب اتفاقية CC BY-NC-SA 4.0، يُرجى ذكر المصدر عند إعادة النشر.تمت ترجمة هذه المشاركة باستخدام ChatGPT، يرجى تزويدنا بتعليقاتكم إذا كانت هناك أي حذف أو إهمال.