История изменений
Исправление LINUX-ORG-RU, (текущая версия) :
Набросал на коленке, может такое надо это стилизация под низкую битность, а не настоящее преобразование.
Прост чёт стало интересно и захотелось.
Пример, слева изначальное, справа стилизация цвета.
Установить love2d
apt install love
Скопировать код в файл main.lua
function love.filedropped(file)
filename = file:getFilename()
ext = filename:match("%.%w+$")
if ext == ".png" then
file:open("r")
fileData = file:read("data")
data = love.image.newImageData(fileData)
img = love.graphics.newImage(data)
end
sx,sy = img:getDimensions()
wx,wy = love.window.getMode()
px = (wx / 2) - (sx / 2)
py = (wy / 2) - (sy / 2)
depth = 4
end
function love.mousemoved(x,y,dx,dy)
if love.mouse.isDown(1) and px and py then
px = px + dx
py = py + dy
end
end
function step(channel,bit)
channel = channel * 255
local step = 255 / bit
return (math.floor(channel / step) * step + (step - 1)) / 255
end
function love.keypressed(key)
if key == 's' then
data:encode("png","out.png")
love.system.openURL(love.filesystem.getSaveDirectory())
return
end
if key == 'up' or key == 'down' then
data = love.image.newImageData(fileData)
depth = key == 'up' and depth + 1 or depth
depth = key == 'down' and depth - 1 or depth
if img then
for y = 1, sy do
for x = 1, sx do
local r, g, b, a = data:getPixel(x-1, y-1);
r = step(r,depth)
g = step(g,depth)
b = step(b,depth)
data:setPixel( x-1, y-1, r, g, b, a );
end
end
end
end
img = love.graphics.newImage(data)
end
function love.draw()
if img then
love.graphics.print("Use KEYUP and KEYDOWN for change imege Depth Color ["..255/(255/depth)..']');
love.graphics.draw(img,px,py)
else
love.graphics.print("Drop PNG Image");
end
end
Открыть терминал в каталоге где лежит main.lua
и выполнить
love .
- В открывшееся окно можно перетащить
png
картинку - Далее можно нажимать стрелочки вверх/вниз на клавиатуре
- оно шакалит цвета по принципу ступенчатных прыжков по диапазону
0-255
чем ниже ступень в виде коффиэциэнта деления, тем больше прыжки. Это чисто симуляция и стилизация,TrueColor
под низкую битность отдельных каналов цветов.
- оно шакалит цвета по принципу ступенчатных прыжков по диапазону
На кнопку s
откроется каталог с преобразованной картинкой out.png
Или можно просто скачать
И запустить imagedeep.love
программой love
Лютый говнокод, написал на коленке, но может оно. А может не оно. Просто как я понял тебе хочется поиграться с ушакаливанием и стилизацией, но при этом не менять формат изображения.
Может пригодится, а может нет.
Исходная версия LINUX-ORG-RU, :
Набросал на коленке, может такое надо
Пример, слева изначальное, справа стилизация цвета.
Установить love2d
apt install love
Скопировать код в файл main.lua
function love.filedropped(file)
filename = file:getFilename()
ext = filename:match("%.%w+$")
if ext == ".png" then
file:open("r")
fileData = file:read("data")
data = love.image.newImageData(fileData)
img = love.graphics.newImage(data)
end
sx,sy = img:getDimensions()
wx,wy = love.window.getMode()
px = (wx / 2) - (sx / 2)
py = (wy / 2) - (sy / 2)
depth = 4
end
function love.mousemoved(x,y,dx,dy)
if love.mouse.isDown(1) and px and py then
px = px + dx
py = py + dy
end
end
function step(channel,bit)
channel = channel * 255
local step = 255 / bit
return (math.floor(channel / step) * step + (step - 1)) / 255
end
function love.keypressed(key)
if key == 's' then
data:encode("png","out.png")
love.system.openURL(love.filesystem.getSaveDirectory())
return
end
if key == 'up' or key == 'down' then
data = love.image.newImageData(fileData)
depth = key == 'up' and depth + 1 or depth
depth = key == 'down' and depth - 1 or depth
if img then
for y = 1, sy do
for x = 1, sx do
local r, g, b, a = data:getPixel(x-1, y-1);
r = step(r,depth)
g = step(g,depth)
b = step(b,depth)
data:setPixel( x-1, y-1, r, g, b, a );
end
end
end
end
img = love.graphics.newImage(data)
end
function love.draw()
if img then
love.graphics.print("Use KEYUP and KEYDOWN for change imege Depth Color ["..255/(255/depth)..']');
love.graphics.draw(img,px,py)
else
love.graphics.print("Drop PNG Image");
end
end
Открыть терминал в каталоге где лежит main.lua
и выполнить
love .
- В открывшееся окно можно перетащить
png
картинку - Далее можно нажимать стрелочки вверх/вниз на клавиатуре
- оно шакалит цвета по принципу ступенчатных прыжков по диапазону
0-255
чем ниже ступень в виде коффиэциэнта деления, тем больше прыжки. Это чисто симуляция и стилизация,TrueColor
под низкую битность отдельных каналов цветов.
- оно шакалит цвета по принципу ступенчатных прыжков по диапазону
На кнопку s
откроется каталог с преобразованной картинкой out.png
Или можно просто скачать
И запустить imagedeep.love
программой love
Лютый говнокод, написал на коленке, но может оно. А может не оно. Просто как я понял тебе хочется поиграться с ушакаливанием и стилизацией, но при этом не менять формат изображения.
Может пригодится, а может нет.