سؤال

لدي كود بايثون يحتاج إلى القيام ببعض الأشياء البسيطة للصور الفوتوغرافية:قص العلامة المائية وتغيير حجمها وتراكبها.لقد استخدمت PIL، وكانت نتائج إعادة التشكيل/تغيير الحجم رهيبة.لقد استخدمت imagemagick، وتم تصميم الواجهة والأوامر من خلال تعبئة قطة في صندوق، ثم رميها بشكل متكرر على مجموعة من السلالم على لوحة المفاتيح.

أنا أبحث عن شيء ليس PIL أو Imagemagick يمكنني استخدامه مع python لإجراء تحويلات صور بسيطة وعالية الجودة.في هذا الصدد، ليس من الضروري أن تحتوي على روابط بايثون إذا كانت واجهة سطر الأوامر جيدة.

أوه، ويجب أن يكون الأمر مستقلاً نسبيًا عن النظام الأساسي، فخوادم الإنتاج لدينا تعمل بنظام التشغيل Linux، لكن بعض مطورينا يتطورون على نظام التشغيل Windows.ولا يمكن أن يتطلب تثبيت مجموعة من أكواد واجهة المستخدم الرسومية السخيفة لاستخدامها كمكتبة أيضًا.

هل كانت مفيدة؟

المحلول

لقد استخدمت PIL، وكانت نتائج إعادة التشكيل/تغيير الحجم رهيبة.

لا ينبغي أن يكونوا كذلك، طالما أنك:

  1. استخدم فقط تصفية Image.ANTIALIAS لعمليات تصغير الحجم
  2. استخدم فقط تصفية Image.BICUBIC لعمليات الارتقاء.
  3. تذكر أن تقوم بالتحويل إلى وضع الألوان "RGB" قبل تغيير الحجم إذا كنت تستخدم صورة ملونة
  4. لا تستخدم .thumbnail().انها حماقة
  5. تعيين quality= المستوى إلى شيء مناسب عند حفظ ملفات JPEG (الإعداد الافتراضي منخفض جدًا)

نصائح أخرى

وأنا غير متأكد لماذا Image.thumbnail هو الحصول على مثل هذا واقية من الرصاص. في الإصدار الحالي أنني يلوذ بالفرار منه لا أكثر قليلا من معرفة الحجم المطلوب وتغيير حجم الصورة في المكان. طالما كنت تستخدم فلتر إعادة تشكيله الصحيح وتحويلها إلى RGB أولا (كما يقول bobince) يجب المصغرات ألا تكون مختلفة من حجمها.

إليك المصدر الفعلي للأسلوب المصغرة:

def thumbnail(self, size, resample=NEAREST):
  # preserve aspect ratio
  x, y = self.size
  if x > size[0]: y = max(y * size[0] / x, 1); x = size[0]
  if y > size[1]: x = max(x * size[1] / y, 1); y = size[1]
  size = x, y

  if size == self.size:
      return

  self.draft(None, size)

  self.load()

  try:
      im = self.resize(size, resample)
  except ValueError:
      if resample != ANTIALIAS:
          raise
      im = self.resize(size, NEAREST) # fallback

  self.im = im.im
  self.mode = im.mode
  self.size = size

  self.readonly = 0

وPIL يمكن القيام به تغيير حجم جيد. تأكد من مصدر الصورة الخاصة بك في وضع RGB، وليس وحة الألوان، ومحاولة الخيارات خوارزمية مختلفة.

وعلى الرغم يماغيماغيك يبدو أن الأمر الواقع مكتبة التصوير المفتوحة المصدر، وربما الشيطان ( عبر منصة، ويبدو أن القيام بعمليات صورة بسيطة) أو FreeImage .

هل راجعت pypi ؟ أظهر بحث سريع بعض الأدوات المتعلقة صورة هناك، اكتشفت أيضا بيثون كلمة المدير العام، أي فكرة كيف مفيدة قد يكون بالرغم من ذلك.

وأنا لم أصب أي مشاكل مع PIL نفسي، ولكن نوعا من التنوع قد تكون مثيرة للاهتمام.

والأعرج واجهة سطر الأوامر معقولة، على ما أعتقد.

ألقِ نظرة على بعض مكتبات التصوير هذه:

hxxp://pypi.python.org/pypi/collective.croppingimagefield/0.1beta

hxxp://pypi.python.org/pypi/cropresize/0.1.1

hxxp://pypi.python.org/pypi/image_resize/1.0

وآخر مرة مقارنة، خرج هذا downscaler هو مطابق تقريبا لتلك التي خيار جمب "مكعب":

 import Image

 def stretch(im, size, filter=Image.NEAREST):
     im.load()
     im = im._new(im.im.stretch(size, filter))
     return im

وIIRC، فإن الاختلافات لا يمكن تمييزها بصريا - بعض بكسل القيم +/- 1 بسبب التقريب، وأنها تميل إلى أن تكون جولة الحواف. انها ليست بطيئة سواء.

وCF: HTTP: //www.mail-archive كوم / صورة سيج @ python.org / msg00248.html

<اقتباس فقرة>   

ولقد استعملت PIL، وإعادة تشكيل / تغيير حجم النتائج الرهيبة.

وتغيير حجم في PIL كسرت بطرق عديدة ولا يتم الاحتفاظ PIL لفترة طويلة. بدءا من وسادة 2.7 يتم إصلاحها معظم المشاكل على طول مع بشكل كبير تحسين الأداء. تأكد من أنك تستخدم آخر وسادة .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top