Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 4, 2014 21:37:35

elementfani
Зарегистрирован: 2014-04-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Уменьшение изображений работает не корректно

Здравствуйте.
Написал скрипт для уменьшения изображения и наложения на него возядного знака.

На локальном компьютере работает нормально. У меня Python 2.7.5


На хостинге (jino.ru) фото получается с серой сеткой, не понимаю почему она берется.


На хостинге установлены 2 версии Python

$ python -V
Python 2.6.5

$ python2.7 -V
Python 2.7

Пробовал на других хостингах, на большинсктве такая же проблема. Но есть и хостинги, на которых мой скрипт преобразует изображения нормально, без сетки.

В чем может быть проблема?

Вот сам скрипт. Я вообще не Python-программист, поэтому за качество кода прошу не ругать.
Пытался написать этот же функционал на PHP, но он вообще нормально уменьшать фотки не умеет.

# Example
# python resize.py '/Users/elementfani/Downloads/q/1000x1000.jpg' '/Users/elementfani/Downloads/q/387x387.jpg' 387 387 95 '/Users/elementfani/Downloads/q/watermark_3.png'

import sys
from PIL import Image

#print sys.argv

filter = Image.ANTIALIAS #BILINEAR
imageFile = sys.argv[1]
thumbFile = sys.argv[2]
width = int(sys.argv[3])
height = int(sys.argv[4])
quality = int(sys.argv[5])


# Open image
image = Image.open(imageFile)

if image.mode != 'RGBA':
image = image.convert('RGBA')

# Resize image
image = image.resize((width, height), filter)

# If watermark exist
if len(sys.argv) == 7:
watermarkFile = sys.argv[6]

# Open watermark
watermark = Image.open(watermarkFile)

# Resize watermark
if image.size[0] != watermark.size[0] and image.size[1] != watermark.size[1]:
watermark = watermark.resize(image.size, filter)

# Add watermark
layer = Image.new('RGBA', image.size, (0, 0, 0, 0))
position = (image.size[0] - watermark.size[0], image.size[1] - watermark.size[1])
layer.paste(watermark, position)
Image.composite(layer, image, layer).save(thumbFile, quality=quality)
else:
#Resize and save image
image.save(thumbFile, quality=quality)

Отредактировано elementfani (Апрель 4, 2014 21:39:25)

Офлайн

#2 Апрель 5, 2014 11:38:23

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Уменьшение изображений работает не корректно

Не надо так извращаться
Есть метод .thumbnail. Он за Вас сделает все необходимое. И даже больше.
Можно вторым аргументом ему передать алгоритм сжатия, чтобы откорректировать результат.

P.S. Будут вопросы - пишите …

Офлайн

#3 Апрель 9, 2014 00:33:30

elementfani
Зарегистрирован: 2014-04-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Уменьшение изображений работает не корректно

Не помогло. Переписал скрипт, всё равно серые полосы появляются, если выбрать фильтр Image.ANTIALIAS
Как и прежде, на локальном компе фотки уменьшаются нормально, без серых полос, а на хостинге появляются полосы. (если на мониторе не видно, можно пипеткой проверить в графическом редакторе, на последней фотке фон серый, а не белый)

Image.NEAREST


Image.BILINEAR


Image.BICUBIC


Image.ANTIALIAS


from PIL import Image
imageFile = 'original.jpg'
size = 100, 100
quality = 100
im = Image.open(imageFile)
im.thumbnail(size, Image.NEAREST)
im.save('im_nearest.jpg', quality=quality)
im = Image.open(imageFile)
im.thumbnail(size, Image.BILINEAR)
im.save('im_bilinear.jpg', quality=quality)
im = Image.open(imageFile)
im.thumbnail(size, Image.BICUBIC)
im.save('im_bicubic.jpg', quality=quality)
im = Image.open(imageFile)
im.thumbnail(size, Image.ANTIALIAS)
im.save('im_antialias.jpg', quality=quality)

Отредактировано elementfani (Апрель 9, 2014 19:38:42)

Офлайн

#4 Апрель 9, 2014 01:07:43

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Уменьшение изображений работает не корректно

Вы хотите сказать, что при уменьшении фотографии фон меняется на другой.
Давайте так. Вы прикрепляете фотографию, которая была до и фотографию, которая стала после с указанием места, где все стало плохо

Офлайн

#5 Апрель 9, 2014 09:14:50

elementfani
Зарегистрирован: 2014-04-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Уменьшение изображений работает не корректно

Нельзя сказать, чот фон полностью меняется. На нём появляются светло-серые полосы, которые видны на хорошем мониторе.

Оригинал изображения


Уменьшенное изображение с применением фильтра Image.ANTIALIAS


Место, где стало всё плохо:
Белый фон стал серым, т.к. на нем появились полосы с цветом #fcfcfc (и другими оттенками серого)

Это происходит ТОЛЬКО если фильтр установлен Image.ANTIALIAS, с другими фильтрами фон остается белым, но качество уменьшенного изображения становится очень грубым.

Офлайн

#6 Апрель 9, 2014 11:18:49

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Уменьшение изображений работает не корректно

Я приношу свои извинения, но я скачал обе фотографии и у меня на обоих фон не белый, а
#fefefe. Могу посоветовать только сделать следующее:

from PIL import Image
imageFile = 'original.jpg'
size = 100, 100
quality = 100
im = Image.open(imageFile)
im = im.convert("RGBA")
im.thumbnail(size, Image.ANTIALIAS)
im.save('im_antialias.jpg', quality=quality)

P.S. Больше никаких мыслей у меня нет. У меня все одинаковое. Проверял на двух системах. На Fedora и XP. На Fedora использовал Gimp-2.8, а на ХР анализировал фотографии с помощью Photoshop.

Офлайн

#7 Апрель 9, 2014 18:27:28

elementfani
Зарегистрирован: 2014-04-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Уменьшение изображений работает не корректно

Прошу прощения, оригинал действительно с серым фоном скинул. Вот файл с идеально белым фоном #FFFFFF


Ваш скрипт тоже затемняет фон и он получается серый.


Теперь и у меня никаких мыслей нет

Офлайн

#8 Апрель 9, 2014 19:22:35

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Уменьшение изображений работает не корректно

Другие методы дают значительно хуже результат?

Офлайн

#9 Апрель 9, 2014 19:39:51

elementfani
Зарегистрирован: 2014-04-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Уменьшение изображений работает не корректно

Да, можно сравнить на изображениях

Image.NEAREST


Image.BILINEAR


Image.BICUBIC


Image.ANTIALIAS


Видно, что качество значительно теряется, хоть и фон остается белым.

Офлайн

#10 Март 29, 2016 06:21:02

N.Onim
Зарегистрирован: 2016-03-29
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Уменьшение изображений работает не корректно

Ничего себе, вы все действительно сделать код работает. Но для изменения размера фотографий, я предпочел бы использовать Фоновое изображение программное обеспечение, чтобы сделать это сделать сразу.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version