Django的,SORL-缩略图作物图像开头(Django, sorl-thumbnail crop

2019-07-20 19:48发布

大家好,我想知道,如果SORL-缩略图有任何选项从底部到顶部裁剪......我有一个垃圾问题,在某些画面SORL-缩略图croping人的头部照片。

谢谢

Answer 1:

我刚刚发布SORL-缩略图(3.2.5)的新版本与边缘 btol45的回答启发智能裁剪裁剪。

引用文档:

默认情况下,图像被裁剪之前居中。 到从边缘裁剪,传递包含逗号分隔的字符串xy百分比偏移量(负值从右侧/底部去)。 下面是一些例子:

  • crop="0,0"就会突然从左侧和顶部边缘。

  • crop="-10,-0"将从右边缘(用10%偏移)和底部边缘修剪。

  • crop=",0"将保持用于x轴(水平方向为中心的图像)和作物从顶缘的默认行为。

该图像还可以是“智能裁剪”通过使用crop="smart" 。 该图像是通过从与所述至少熵边缘去除切片增量裁剪下来所要求的大小。



Answer 2:

我不相信这是内置到Solr的缩览图呢,但这里有一个插件,我从那个书签交易完成你以后那儿剽窃。 它并不完美,但它往往把工作做好。 它不会从底部裁剪到顶部,而是使用切片的熵来确定从裁剪什么目的。 这是对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',) 


Answer 3:

这个问题是旧的,但是,因为它Django的智能作物搜索时出现在谷歌的第一个结果,我想补充我的小晶粒。

这种“作物=自动”功能,得到了添加到SORL,但后来,它再次得到了清除。 因此,对于其他人谁可能带有这种需要,你可以试试:

https://github.com/francescortiz/image

它允许您通过管理员设置的图像成为关注的焦点。



Answer 4:

虽然原来的答案不再工作,在最新版本的SORL的,你可以指定用空格分隔的X和Y裁剪值。 例如,作物=“中心顶”,将集中在X但要Y,这是对我的情况下照片的人更好的顶部,但并不完美。



文章来源: Django, sorl-thumbnail crop picture head