Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 25 Май, 2012, 10:21:11

Страниц: [1] 2
Печать
Автор Тема: Помогите ухудшить качество картинки =)  (Прочитано 902 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mr.Pihto    ↓ 
01 Февраль, 2011, 08:55:08
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

Короче мне нужнолюбую картинку немного заквадратить. решил брать по 9 пикселей с картинки определять их среднюю арифметическую цвета и закрашивать им по 9 пикселей.. но мой говнокод не оправдал моих надежд.. барыжняг какойто получился...=(
проблема в следующем:
на выходе изображение получаеца говняшкой - как мне и надо (ура!), но оно сука в 3 раза меньше чем нужно.. нужно както хитро отсортировать списки но в подобных задачах я пока и уже бессилен(пол ночи ковырял)
картинка пока что выходит чернобелая - эту проблему решать не надо.. с этим проблем нет.. просто сделал себе немного комфортнее в куче говна. ну собсно вот
Python

# coding: utf-8
from PIL import Image, ImageDraw, ImageOps
 
im = Image.open('C:\image.jpg')
im = im.convert('L')
 

x1,y1 = im.size
x1,y1
dot = im.load()
lst = []
newlst = []
 
for x in xrange(x1):
    if x%3==0:
        if x1-x<3: break #если картинка заканчивается меньше чем через 3 пикселя - нахуй
        for y in xrange(y1):
            if y%3==0:
                if y1-y<3: break #--//--
                col = (dot[x,y]+dot[x+1,y]+dot[x,y+1]+dot[x+1,y+1]+dot[x+2,y]+dot[x+2,y+1]+dot[x+2,y+2]+dot[x+1,y+2]+dot[x,y+2])/9 # средняя орифметическая 9 пикселей
                lst.append(col)
   
        newlst.append(lst)
        del lst
        lst = []
image = Image.new("RGB", (x1,y1), (255, 255, 255))
draw = ImageDraw.Draw(image)
 
for q in xrange(len(newlst)): #нарисовать новую картинку из матрица которая в 3 раза меньше чем оригинал.. вот тут жопа
    if q%3==0:
        for r in xrange(len(newlst[q])):
            if r%3==0:
                draw.point((q,r),(newlst[q][r],newlst[q][r],newlst[q][r]))
                draw.point((q+1,r),(newlst[q][r],newlst[q][r],newlst[q][r]))
                draw.point((q,r+1),(newlst[q][r],newlst[q][r],newlst[q][r]))
                draw.point((q+1,r+1),(newlst[q][r],newlst[q][r],newlst[q][r]))
                draw.point((q+2,r),(newlst[q][r],newlst[q][r],newlst[q][r]))
                draw.point((q+2,r+1),(newlst[q][r],newlst[q][r],newlst[q][r]))
                draw.point((q+2,r+2),(newlst[q][r],newlst[q][r],newlst[q][r]))
                draw.point((q+1,r+2),(newlst[q][r],newlst[q][r],newlst[q][r]))
                draw.point((q,r+2),(newlst[q][r],newlst[q][r],newlst[q][r]))
                #даже не смотря на то что я закрашиваю 9 пикселей а не 1 картинка все равно сука в 3 раза меньше.... вот тут я недопонимаю
image.show()
Записан
phpdude    ↓ 
01 Февраль, 2011, 09:15:42 , спустя 20 минут 34 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: д-о-х-у-я!
Сила слова: 1.66

if q%3==0:
не? я алго не смотрел, просто прикинул где может быть ошибка
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Mr.Pihto    ↓ 
01 Февраль, 2011, 09:26:26 , спустя 10 минут 44 секунды
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

не.. эт я проверяю q.. код выполняется только если она кратна трём.. тобиш чтоб через 2 пикселя проскакивал скрипт.. если он этого делать не будет то 9-пиксельные квадраты будут накладываться друг на друга
Записан
phpdude    ↓ 
01 Февраль, 2011, 09:33:52 , спустя 7 минут 26 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: 20790
Сила слова: 1.66

Mr.Pihto, тогда похуй)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Mr.Pihto    ↓ 
01 Февраль, 2011, 09:35:26 , спустя 1 минуту 34 секунды
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

ну если ресайзить из маленького ресунка то грани поплывут да и содержимое самих квадратов уёбещнее будет..
Записан
Mr.Pihto    ↓ 
01 Февраль, 2011, 09:43:53 , спустя 8 минут 27 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

откройте мне глаза Т_Т
Записан
master    ↓ 
01 Февраль, 2011, 10:22:38 , спустя 38 минут 45 секунд
НЕ ХУЕТА! ХУЕТА!

Квадратов сколько видишь ты?
Группа: Джедаи

Карма: 44
Сообщений: 2080
Сила слова: 2.12

сохрани в jpeg и пережми imagemagick
PHP

$imgfile = '/path/to/image.jpg';
exec("convert $imgfile -quality 80 JPG:$imgfile")
Записан

artoodetoo    ↓ 
01 Февраль, 2011, 12:21:20 , спустя 1 час 58 минут 42 секунды
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

Text

convert cowboy.jpg -resize 33% cowboy2.jpg
convert cowboy2.jpg -scale 300% cowboy3.jpg
 


* cowboy.jpg (198.03 Кб, 827x1181 - просмотрено 211 раз.)

* cowboy3.jpg (39.62 Кб, 300x427 - просмотрено 210 раз.)
Записан
Frozzeg    ↓ 
01 Февраль, 2011, 12:22:56 , спустя 1 минуту 36 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Пятросянище

Карма: 92
Сообщений: 5499
Сила слова: 1.67

хауз
Записан

Эксперт — это человек, который в узкой области допустил все возможные ошибки. © Нильс Бор.
Отложить на завтра — значит впасть в рекурсию. © Frozzeg
artoodetoo    ↓ 
01 Февраль, 2011, 12:49:17 , спустя 26 минут 21 секунду
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

чето я накосячил с параметрами, но суть понятна.
 
(не учел, что под Windows символ % имеет особый смысл, надо писать "33%%" чтобы не проебался)
 
итак, уменьшаем "по умному", чтобы сохранилось максимум инфы о цвете, а увеличиваем тупо размножая точки. тогда картинка будет почти без мусора и точки жирные, как заказывали:
 
батник, под *nix уберите лишние проценты:
Text

convert cowboy.jpg -resize 20%% -quality 100 cowboy2.jpg
convert cowboy2.jpg -scale 500%% cowboy3.jpg
 

на php БЕЗ imagic аналогично можно сделать через imagecopyresampled + imagecopyresized


* cowboy3.jpg (60.14 Кб, 280x400 - просмотрено 198 раз.)
« Последнее редактирование: 01 Февраль, 2011, 12:49:17 от artoodetoo » Записан
Mr.Pihto    ↓ 
01 Февраль, 2011, 12:51:01 , спустя 1 минуту 44 секунды
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

вот оно че.. короче в блоке кода где картинка снова отрисовывается я не по тем координатам пиксели красил...по(x/3,y/3)
 
Python
# coding: utf-8
from PIL import Image, ImageDraw, ImageOps
 
im = Image.open('C:\en.gif')
im = im.convert('L')
 

x1,y1 = im.size
 
dot = im.load()
lst = []
newlst = []
 
for x in xrange(x1):
    if x%3==0:
        if x1-x<3: break
        for y in xrange(y1):
            if y%3==0:
                if y1-y<3: break
                col = (dot[x,y]+dot[x+1,y]+dot[x,y+1]+dot[x+1,y+1]+dot[x+2,y]+dot[x+2,y+1]+dot[x+2,y+2]+dot[x+1,y+2]+dot[x,y+2])/9
                lst.append(col)
 
        newlst.append(lst)
        del lst
        lst = []
 
image = Image.new("RGB", (x1,y1), (255, 255, 255))
draw = ImageDraw.Draw(image)
 
for q in xrange(0,x1,3):
    q1 = q/3
    if q>=(len(newlst)-3)*3: break
    for r in xrange(0,y1,3):
        r1 = r/3
        if r>=(len(newlst[q1])-3)*3: break
        draw.point((q,r),(newlst[q1][r1],newlst[q1][r1],newlst[q1][r1]))
        draw.point((q+1,r),(newlst[q1][r1],newlst[q1][r1],newlst[q1][r1]))
        draw.point((q,r+1),(newlst[q1][r1],newlst[q1][r1],newlst[q1][r1]))
        draw.point((q+1,r+1),(newlst[q1][r1],newlst[q1][r1],newlst[q1][r1]))
        draw.point((q+2,r),(newlst[q1][r1],newlst[q1][r1],newlst[q1][r1]))
        draw.point((q+2,r+1),(newlst[q1][r1],newlst[q1][r1],newlst[q1][r1]))
        draw.point((q+2,r+2),(newlst[q1][r1],newlst[q1][r1],newlst[q1][r1]))
        draw.point((q+1,r+2),(newlst[q1][r1],newlst[q1][r1],newlst[q1][r1]))
        draw.point((q,r+2),(newlst[q1][r1],newlst[q1][r1],newlst[q1][r1]))
 
image.save('C:\img.jpg',"JPEG")
 

            
            
 
 
Спустя 54 секунды добавил
бля не то)
Спустя 25 секунд добавил
разогнался)))


* img.jpg (16.84 Кб, 298x350 - просмотрено 194 раз.)

* en.gif (68.12 Кб, 298x350 - просмотрено 60 раз.)
« Последнее редактирование: 01 Февраль, 2011, 12:47:40 от Mr.Pihto » Записан
artoodetoo    ↓ 
01 Февраль, 2011, 12:52:31 , спустя 1 минуту 30 секунд
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

магия! из вовы делаем альберта
Спустя 27 секунд добавил
зря убрал )))
Записан
Mr.Pihto    ↓ 
01 Февраль, 2011, 12:55:44 , спустя 3 минуты 13 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

ыыыыыыыы =))))))))
Записан
Mr.Pihto    ↓ 
01 Февраль, 2011, 01:31:18 , спустя 35 минут 34 секунды
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

кстате как в питоне определять каждуй, допустим 10ю итерацию в цикле фор?
Записан
Mr.Pihto    ↓ 
01 Февраль, 2011, 01:37:24 , спустя 6 минут 6 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

флажками не хочу.. должно быть както проще
Записан
Страниц: [1] 2
Печать
 

Перейти в:  

Этот топик скрыли: Sinkler