我想创建一个函数,例如:
def generateThumbnail(self, width, height):
"""
Generates thumbnails for an image
"""
im = Image.open(self._file)
im.thumbnail((width, height), Image.ANTIALIAS)
im.save(self._path + str(width) + 'x' +
str(height) + '-' + self._filename, "JPEG")
可以给定文件和调整大小的位置。
当前函数的效果很好,只是在必要时不会裁剪。
如果给出的是矩形图像,并且需要调整正方形大小(宽度=高度),则必须进行一些中心加权的裁剪。
您需要在调整大小之前正确裁剪图像。基本思想是确定源图像的最大矩形区域,该区域的纵横比(宽高比)与缩略图图像相同,然后在调整为缩略图尺寸之前将其周围的任何多余部分修剪(裁剪)。这是一个函数,它将计算此类裁剪区域的大小和位置:
def cropbbox(imagewidth,imageheight, thumbwidth,thumbheight):
""" cropbbox(imagewidth,imageheight, thumbwidth,thumbheight)
Compute a centered image crop area for making thumbnail images.
imagewidth,imageheight are source image dimensions
thumbwidth,thumbheight are thumbnail image dimensions
Returns bounding box pixel coordinates of the cropping area
in this order (left,upper, right,lower).
"""
# determine scale factor
fx = float(imagewidth)/thumbwidth
fy = float(imageheight)/thumbheight
f = fx if fx < fy else fy
# calculate size of crop area
cropheight,cropwidth = int(thumbheight*f),int(thumbwidth*f)
# for centering use half the size difference of the image and the crop area
dx = (imagewidth-cropwidth)/2
dy = (imageheight-cropheight)/2
# return bounding box of centered crop area on source image
return dx,dy, cropwidth+dx,cropheight+dy
if __name__=='__main__':
print("===")
bbox = cropbbox(1024,768, 128,128)
print("cropbbox(1024,768, 128,128): {}".format(bbox))
print("===")
bbox = cropbbox(768,1024, 128,128)
print("cropbbox(768,1024, 128,128): {}".format(bbox))
print("===")
bbox = cropbbox(1024,1024, 96,128)
print("cropbbox(1024,1024, 96,128): {}".format(bbox))
print("===")
bbox = cropbbox(1024,1024, 128,96)
print("cropbbox(1024,1024, 128,96): {}".format(bbox))
确定裁剪区域后,调用im.crop(bbox)
,然后调用im.thumbnail(...)
返回的图像。
我得到了一个图像,也得到了图像中区域的边界。例如,我有一个逻辑类型的掩码,边界的值为1,而对于其他像素,该值为0。我想对边界分割的区域进行标注,而我不确定如何基于连续边界对区域进行分割和标注。 边界看起来是这样的: 有了上面的图表,将会识别出四个区域。
问题内容: 例如: 还是在Python中有一个内置函数可以做到这一点? 问题答案: 没有人迄今已提到的新这是在2.7版所添加的选项 格式化规范的迷你语言 -见PEP 378:格式说明千位分隔符 在什么在Python 2.7文档的新 。它易于使用,因为您不必弄乱(但由于国际化而受到限制,请参阅原始的PEP 378 )。它适用于浮点数,整数和小数- 以及迷你语言规范中提供的所有其他格式设置功能。 用法
问题内容: 我有一些具有数据类型的列,我想预览(或浏览)那些表中的数据。在SQL Server Management Studio中使用时,图像列的值以十六进制显示。因为十六进制值对我没有用,最简单的预览这些图像的方法是什么? PS .:数据库不在我的控制之下,因此不能选择更改数据类型。 问题答案: 我将编写一个proc(或查询;请参见下文)以将二进制文件导出到文件系统中,然后使用任何旧的现成的照
问题内容: 我正在尝试为使用OpenCV中的类的C ++库创建 Python / Cython 包装器。在官方的Python包装器中,所有函数都使用NumPy代替,这非常方便。但是在我自己的包装器中,如何进行这种转换?也就是说,我怎么 创建 的 ? 问题答案: 如kyamagu所建议,您可以使用OpenCV的官方python包装器代码,尤其是and 。 我一直在像您一样处理所有依赖项和生成的头文件
问题内容: 每隔几周就会弹出一个奇怪的神秘数据损坏错误,而没人知道为什么。到目前为止,表上的主键似乎是自发更改的,因此指向该表的其他行现在被弄乱了。 尽管我仍在寻找造成这种情况的根本原因(无法进行复制),但我还是希望通过某种临时手段来防止列值不断变化。这是表模式: 我们当然需要能够创建新的行,但是无论运行什么奇怪的查询,我都想防止任何更改。 我能想到的一些想法: 我对Oracle的表权限不是很熟悉
问题内容: 将格式化的字符串转换为日历的最简单,最简单的方法是什么?例如将“ dd.MM.yyyy”添加到日历? 问题答案: DateFormat df = new SimpleDateFormat(“dd.MM.yyyy”); Calendar cal = Calendar.getInstance(); cal.setTime(df.parse(stringInstanceRepresentin