Answer the question
In order to leave comments, you need to log in
How to enlarge image x*2 and y*2 without interpolation?
It is necessary to turn a three-color image 64x64 into 256x256 so that the color that was:
1,0,0,...
0,0,0,...
0,0,0,...
...
Spread like this:
1,1, 0,...
1,1,0,...
0,0,0,...
...
Tried Pillow with different interpolation modes on resize - nothing came up. I think it can be done through NumPy, but what functions?
Answer the question
In order to leave comments, you need to log in
Please don't hit. Here I stole the source code from habra and scrawled it as best I could:
from PIL import Image, ImageDraw # Подключим необходимые библиотеки.
image = Image.open("temp.jpg") # Открываем изображение.
width = image.size[0] # Определяем исходную ширину.
height = image.size[1] # Определяем исходную высоту.
pix = image.load() # Выгружаем значения пикселей исходной картинки.
imagemode = image.mode # Получаем цветовой формат исходного изображения
multiplicator = 2 # тут множитель, по-умолчанию 2
newwidth = width * multiplicator # вычисляем новую высоту
newheight = height * multiplicator # вычисляем новую ширину
newimage = Image.new(mode=imagemode, size=(newwidth, newheight)) # создаем новую картинку
newpix = newimage.load() # загружаем новую картинку попиксельно
draw = ImageDraw.Draw(newimage) # создаем инструмент рисования
if __name__ == '__main__':
new_image_list = [] # создаем пустой массив строк нового изображения
for i in range(width):
new_line_list = [] # создаем пустой массив очередной новой строки
for j in range(height): # получаем цветность очередного пикселя исходной картинки
newpixel = pix[i, j]
for _ in range(multiplicator): # лепим в конец массива новой строки нужное кол-во таких пикселей
new_line_list.append(newpixel)
for _ in range(multiplicator): # лепим в конец массива строк нужное кол-во вновь созданных строк
new_image_list.append(new_line_list)
for i in range(newwidth): # рисуем построчно попиксельно новую картинку из массива строк нового изображения
for j in range(newheight):
pixel = tuple(new_image_list[i][j])
draw.point((i, j), pixel)
newimage.save("ans.bmp", "BMP") # записываем всё это в файл (выбрал bitmap потому, что там явно получаются пиксели
# как заказано, без дальнейшей оптимизации форматом jpg
del draw
image.close()
newimage.close()
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question