سؤال

يا شباب، أود أن أعرف ما إذا كان لدى Sorl-Thumbnail أي خيار للمقاصين من الأسفل إلى الأعلى ... لدي مشكلة القمامة، في بعض الصور Sorl-Thumbnail هو محصول رأس الأشخاص في الصور.

شكرا

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

المحلول

لقد أصدرت للتو نسخة جديدة من sorl-thumbnail (3.2.5) مع اقتصاص من الحافة و اقتصاصات ذكية مستوحاة من إجابة BTOL45.

نقلا عن المستندات:

بشكل افتراضي، يتم توسيط الصورة قبل اقتصاصها. للمقاصين من الحواف، اجتياز سلسلة مفصولة بفواصل تحتوي على x و yالإزاحة النسبة المئوية (القيم السلبية تذهب من اليمين / الأسفل). بعض الأمثلة تتبع:

  • crop="0,0" سوف اقتصاص من الحواف اليسرى والأعلى.

  • crop="-10,-0" سوف اقتصاص من الحافة اليمنى (مع إزاحة 10٪) والحافة السفلية.

  • crop=",0" سيبقي السلوك الافتراضي لمحور X (أفقيا التركز على الصورة) والمحصول من الحافة العلوية.

يمكن أن تكون الصورة أيضا "اقتصاص ذكي" باستخدام crop="smart". وبعد يتم اقتصاص الصورة بشكل تدريجي إلى الحجم المطلوب عن طريق إزالة الشرائح من الحواف بأقل انتروبيا.

نصائح أخرى

لا أصدق أن هذا مدمج في مصغرات سوللين حتى الآن، لكن إليك مسافة مقدمة ذهبت من Reddit التي تنجز ما أنت بعده. انها ليست مثالية، لكنها تميل إلى إنجاز المهمة. لا يتم محصوله من الأسفل إلى الأعلى، بل يستخدم انتروبيا من الشرائح لتحديد ما نهاية المحاصيل من. إنه تحسن بسيط على إصدار Reddit لأنه يعالج أيضا صورا أو صورا مناظر طبيعية.

import Image, ImageFile, math
#from ImageEnhance import Color
#import os, sys


def image_entropy(im):
    """From Reddit: Calculate the entropy of an image"""
    hist = im.histogram()
    hist_size = sum(hist)
    hist = [float(h) / hist_size for h in hist]
    return -sum([p * math.log(p, 2) for p in hist if p != 0])

def square_image(im, requested_size, opts):
    """From Reddit: if the image is taller than it is wide, square it off. determine
    which pieces to cut off based on the entropy pieces.

    This version is improved as it squares images that are wider than it is tall.
    """
    if 'autosquare' in opts:
        x,y = im.size

        # if the image is taller than it is wide:
        if y > x:
            while y > x:
                #slice 10px at a time until square
                slice_height = min(y - x, 10)

                bottom = im.crop((0, y - slice_height, x, y))
                top = im.crop((0, 0, x, slice_height))

                #remove the slice with the least entropy
                if image_entropy(bottom) < image_entropy(top):
                    im = im.crop((0, 0, x, y - slice_height))
                else:
                    im = im.crop((0, slice_height, x, y))

                x,y = im.size

        # If the image is wider than it is tall
        else:
            while y < x:
                #slice 10px at a time until square
                slice_width = min(x - y, 10)

                left = im.crop((0,0, y, slice_width))
                right = im.crop((0,y - slice_width, x, y))

                #remove the slice with the least entropy
                if image_entropy(left) < image_entropy(right):
                    im = im.crop((0, 0, x - slice_width, y))
                else:
                    im = im.crop((slice_width, 0, x, y))

                x,y = im.size

        im = im.resize(requested_size, resample=Image.ANTIALIAS)

    return im
square_image.valid_options = ('autosquare',) 

هذا السؤال قديم، ولكن، لأنه يبدو كأول نتيجة في Google عند البحث عن محصول Django الذكي، أريد إضافتي الحبوب الصغيرة.

تمت إضافة ميزة "المحاصيل = السيارات" هذه إلى سورل، ولكن لاحقا، تمت إزالتها مرة أخرى. لذلك، بالنسبة للآخرين الذين قد يأتون مع هذه الحاجة، يمكنك محاولة:

https://github.com/francescortiz/image.

مما يسمح لك بتعيين مركز اهتمام الصورة من خلال المسؤول.

في حين أن الإجابة الأصلية لم تعد تعمل، في الإصدارات الحديثة من سورل، يمكنك تحديد قيم المحاصيل X و Y مفصولة. على سبيل المثال، CROP = "TOP Center Top"، ستمركز في X ولكن احتفظ بالأخمة في Y، التي كانت أفضل للصور من الأشخاص في حالتي، ولكن ليس مثاليا.

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