Прощу помощи/совета у Фотошоп мастеров

+48
KaskeTв блоге Блог помощи художникам [БПНХ]7 октября 2024, 20:48
Не совсем уверен, что это нужный блог, но надеюсь художники достаточно часто пользуются фотошопом, чтобы знать разные трюки и фишки.
В общем, мне нужно найти способ вставлять между рядами пикселей на картинках пустые ряды, как бы раздвигая картинку. Не очень понятно, да? Понимаю, потому меня поисковик и не понял, когда я попытался нагуглить урок. Покажу на примере, что я хочу получить.

Есть условная картинка

и мне нужно чтобы фотошоп приводил её к вот такому виду

Только эту я сделал вручную и криво, а надо чтобы программа делал сама и ровно.

Надеюсь, кто-нибудь сможет подсказать.

32 комментария

KaskeT
0
Хм, если по простому я бы увеличил в 3 раза, и сверху положил слой залитый полосатой текстурой. Должно получится, хоть и не факт, что как надо Можно ещё писать программу и решать как умножение массива пикселей, но мне лень думать об этом
Aelmaris
+5
Хм, если по простому я бы увеличил в 3 раза, и сверху положил слой залитый полосатой текстурой. Должно получится, хоть и не факт, что как надо

А идея то интересная! Спасибо.
KaskeT
0
Получилось?
DMW
0
Сейчас у меня нет доступа к моему компу где установлен ФШ, но не вижу причин почему не получится.
KaskeT
-1
О! Ведь точно! Можно сделать как-то так:

К дискорду циклы, это ж Питон! ;)
    import numpy as np

...

    # Copy the original pixels to the new array
    new_img_data[::2, ::2] = img_data

    # Blacken every other column and every other row
    new_img_data[1::2, ::2] = 0
    new_img_data[::2, 1::2] = 0
RN3AOC (ред.)
+3
Я вам не скажу за фотошопу, но в крите это именно так делается как аелмарис написал. Просто масштабируется без размытия и накладывается маска с текстурной заливкой.
vorodor
+3
Не вижу никаких других вариантов, кроме как вручную передвигать с помощью инструмента выделения
Vibrissa
+1
Если подождешь выходных — могу нафигачить небольшую прогу, которая будет это делать. А может и до выходных… Кстати, фотошоп тоже умеет в скрипты, но мне лень в них разбираться.
Anvis (ред.)
+2
Не, спасибо, не нужно. Способ подсказанный Aelmaris мне подойдёт.
KaskeT
-1
Тогда советую почитать про алгоритмы двумерной интерполяции и решить, как лучше будет увеличивать изображение (в моем ФШ их по сути три и последний с вариациями).
Anvis
+3
В моём их штук пять (но разницы чуть), но мне нужно увеличение без изменений, чтобы остались чёткие края у каждого пикселя без размытий. Это я уже тыкал =)
KaskeT
0
Что-нибудь вроде этого пойдет?

Я не отлаживал, просто набросал так, чтоб идею показать.
from PIL import Image

def insert_pixels(image_path):
    """Inserts a black pixel between each pixel of an image, making it twice as large.

    Args:
        image_path (str): The path to the input image.

    Returns:
        PIL.Image: The transformed image.
    """

    img = Image.open(image_path)
    width, height = img.size

    # Create a new image twice as large
    new_width, new_height = width * 2, height * 2
    new_img = Image.new(img.mode, (new_width, new_height))

    # Iterate over the original image and insert pixels
    for y in range(height):
        for x in range(width):
            pixel = img.getpixel((x, y))
            new_x = x * 2
            new_y = y * 2
            new_img.putpixel((new_x, new_y), pixel)
            new_img.putpixel((new_x + 1, new_y), (0, 0, 0))
            new_img.putpixel((new_x, new_y + 1), (0, 0, 0))
            new_img.putpixel((new_x + 1, new_y + 1), pixel)

    return new_img

# Example usage
image_path = "your_image.jpg"  # Replace with your image path
new_img = insert_pixels(image_path)
new_img.save("new_image.jpg")
RN3AOC
+2
Э-э-э… Наверное? Только куда это вставить в фотошопе? =)
KaskeT
-1
Просто запусти в Питоне и скорми ему Флаттершай.bmp

Сейчас, я тогда проверю только, что все работает…
RN3AOC
+1
Ага, работает.
Вот первая исходная Флатти:

Вот Флатти в клеточку:
(я ее руками перегнал в GIF потому что табун не хочет принимать битмэп почему-то… На исходном битмэпе артефактов ГИФки нет.)

UPD
ВОт, JPG не так ее уродует:


Вот этот скрипт я гонял:
from PIL import Image

def insert_pixels(image_path, output_path):
    """Inserts a black pixel between each pixel of an image, making it twice as large.

    Args:
        image_path (str): The path to the input image.
        output_path (str): The path to the output image.
    """

    img = Image.open(image_path)
    width, height = img.size

    # Create a new image twice as large
    new_width, new_height = width * 2, height * 2
    new_img = Image.new(img.mode, (new_width, new_height))

    # Iterate over the original image and insert pixels
    for y in range(height):
        for x in range(width):
            pixel = img.getpixel((x, y))
            new_x = x * 2
            new_y = y * 2
            new_img.putpixel((new_x, new_y), pixel)
            new_img.putpixel((new_x + 1, new_y), (0, 0, 0))
            new_img.putpixel((new_x, new_y + 1), (0, 0, 0))
            new_img.putpixel((new_x + 1, new_y + 1), pixel)

    new_img.save(output_path)

# Prompt the user for the input image filename
image_filename = input("Enter the input image filename (e.g., image.jpg): ")

# Construct the full path to the input image
#image_path = os.path.join("c:\\tmp", image_filename)

# Prompt the user for the output image filename
output_filename = input("Enter the output image filename (e.g., new_image.jpg): ")

# Construct the full path to the output image
#output_path = os.path.join("c:\\tmp", output_filename)

insert_pixels(image_filename, output_filename)
RN3AOC (ред.)
+1
У тебя получилась Х образная решётка, не совсем то, о чём я говорил.
KaskeT
0
А! Понял, что я не так понял. Сейчас попробую поправить.
RN3AOC
0
Не, что-то я запутался. Получается пока Флатти-зебра:

Завтра докую, если тебе еще надо, а то у меня тут уже первый час ночи ;)
RN3AOC
+1
Ну, вообще уже нет, как я писал выше.
KaskeT
0
Ещё вертикальные б полоски наложить, будет как раз сетка
DMW
0
Не, раз уж нет спешки, можно попробовать забить на тупой способ и попробовать вспомнить как в Питоне работают с матрицами ;)
RN3AOC
0
Серьёзно, стоп машина. То, ради чего мне понадобилась пиксельная сетка работает не совсем так, как я себе представлял.
KaskeT
0
Я уже разогнался ;)
Теперь уже просто из любопытства доделаю.
RN3AOC
+3
Его не остановить!!!
vorodor
0
Ты зачем Флатьку на атомы расщипил?(
Sasha-Flyer
+3
del
KaskeT (ред.)
-1
Наверное некоторые могли подумать «А зачем этому полудурку нужна пиксельная сетка вместо нормального пиксельарта?»
Справедливый вопрос. И ответ прост — я думал о том, как увеличить пиксельарт не увеличивая размер пикселей, а увеличивая их число. При этом постараться не слишком сильно испортить картинку. К сожалению как художник я очень не очень и приходится полагаться на такие странные идеи. В итоге получилось… не однозначно.
Тест я провёл всё на той же малышке Флатти, раз уж она есть в посте. Метод я взял подсказанный Aelmaris. Итак.
Берём пиксельарт Флатти в оригинальном размере пикселей

Увеличиваем её в два раза с чёткими краями

Затем накладываем сетку

Сливаем слои, выделяем волшебной палочкой сетку и удаляем её

Получается сетка пикселей.
Теперь берём пипетку и карандаш и подрисовываем границы и заливкой заливаем внутреннюю часть

Итоговый результат… на тройку с минусом. Но, думаю, если попытаться так увеличить не поню с множеством плавных линий, а, к примеру, дом пиксельный, то получится лучше. Или нет, не пробовал ещё.
KaskeT
+2
Мсье знает толк в извращениях! На мой взгляд, выхода тут два. 1 — научиться срисовывать. Ну или обводить увеличенный пиксельный рисунок в каком-нибудь векторном редакторе. 2 — скормить пиксельарт нейросетке. Увы, в последнем я (пока) не шарю.
Anvis
+2
Немного потыкав карандашом в пейнте удалось достигнуть вот такого результата

Щитаю, это уже тянет на четвёрочку. С минусом =D
KaskeT
+2
Ну или так, да. Но попробуй лучше какой-нибудь векторный редактор. С этим можно обвести твой пиксельный рисунок, залить, добавить градиентов и затем отмасштабировать до любого размера без потери качества. Некоторую обводку можно сделать и в фотошопе или САИ, но они больше растровые.
Anvis
+2
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.