powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Можно ли это ускорить
76 сообщений из 76, показаны все 4 страниц
Можно ли это ускорить
    #39344949
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пошаговое уменьшение размера картинки. такое необходимо для сохранения качества уменьшенной картинки
возможно ли ускорить? не только сампроцесс преобразоания, вплоть до окончания сохранения
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
     while (step-- != 0) {
                        tr = new AffineTransform();
                        tr.scale(trans, trans);
                        op = new AffineTransformOp(tr, AffineTransformOp.TYPE_BICUBIC);
                        bi2 = new BufferedImage(w.intValue(), h.intValue(), bi.getType());
                        op.filter(bi, bi2);
                        if (step == 0) {
                            break;
                        }
                        bi = bi2.getSubimage(0, 0, w.intValue(), h.intValue());

                        trans = .5;
                        w = w / 2;
                        h = h / 2;

                    }
                    try {
                        UUID uuid = UUID.randomUUID();
                        ImageIO.write(bi2, "jpg", new File("C:\\Temp\\xxx\\" + uuid.toString() + ".jpg"));
                    } catch (IOException ex) {
                        Logger.getLogger(Page5.class.getName()).log(Level.SEVERE, null, ex);
                    }
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39344961
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпошаговое уменьшение размера картинки. такое необходимо для сохранения качества уменьшенной картинки
Поищи на Хабре, вроде, была хорошая статья об уменьшении. По-моему там только 2х проходов достаточно. Blur и само уменьшение.

вадяне только сампроцесс преобразоания, вплоть до окончания сохранения
А по-русски это как будет?

вадя[src JAVA][/src]
В код вникать тяжело, похоже что он написан не для того чтобы кто-то когда-либо его читал.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39344962
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпошаговое уменьшение размера картинки. такое необходимо для сохранения качества уменьшенной картинки
готовое не интересует что ли?
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39344965
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123готовое не интересует что ли?
Например?
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39344971
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczPetro123готовое не интересует что ли?
Например?
Chris Campbell's incremental scaling
https://github.com/rkalla/imgscalr
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39344990
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Примерно так и уменьшают.
1) Если хочется побыстрее, то вполне хватит билинейной интерполяции, на качестве вряд ли скажется.
2) вот это зачем?
Код: java
1.
bi = bi2.getSubimage(0, 0, w.intValue(), h.intValue());


3) деление на 2 можно ускорить :)
Код: java
1.
w = w >> 1;
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345028
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпошаговое уменьшение размера картинки. такое необходимо для сохранения качества уменьшенной картинки
возможно ли ускорить? не только сампроцесс преобразоания, вплоть до окончания сохранения
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
     while (step-- != 0) {
                        tr = new AffineTransform();
                        tr.scale(trans, trans);
                        op = new AffineTransformOp(tr, AffineTransformOp.TYPE_BICUBIC);
                        bi2 = new BufferedImage(w.intValue(), h.intValue(), bi.getType());
                        op.filter(bi, bi2);
                        if (step == 0) {
                            break;
                        }
                        bi = bi2.getSubimage(0, 0, w.intValue(), h.intValue());

                        trans = .5;
                        w = w / 2;
                        h = h / 2;

                    }
                    try {
                        UUID uuid = UUID.randomUUID();
                        ImageIO.write(bi2, "jpg", new File("C:\\Temp\\xxx\\" + uuid.toString() + ".jpg"));
                    } catch (IOException ex) {
                        Logger.getLogger(Page5.class.getName()).log(Level.SEVERE, null, ex);
                    }


Алгоритм зависнет при входе в цикл с step = -1.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345032
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008Алгоритм зависнет при входе в цикл с step = -1.
И больше вас ничего в этой каше не смущает?
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345033
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А потом сломается из-за переполнения значения типа.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345037
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА по-русски это как будет?
может ImageIO.write заменить на что-то другое.
алгоритм проверен, сначала высчитывается число шагов , с учётом , что уменьшение не может быть разово больше 2 .
первое уменьшение меньше двух, очтальные 2.
авторавторПоищи на Хабре, вроде, была хорошая статья об уменьшении. По-моему там только 2х проходов достаточно. Blur и само уменьшение.
смотрел. этот вариант плохой....

авторChris Campbell's incremental scaling
там кода по-боле, суть таже.
с new что по-другому или ещё что.

авторw = w >> 1 сильно ускорит?
авторАлгоритм зависнет при входе в цикл с step = -1. ситуация исключена
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345039
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczSQL2008Алгоритм зависнет при входе в цикл с step = -1.
И больше вас ничего в этой каше не смущает?
если есть что исправить - я слушаю
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345041
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при копировании - в конце пропала }
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345042
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяавторChris Campbell's incremental scaling
там кода по-боле, суть таже.
переведи)).
Или ты опять про то что свои велосипеды лучше.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345043
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяесли есть что исправить - я слушаю
- Странные условия выхода из цикла
- Почему-то два одинаковых условия выхода из цикла в 2х разных местах. Для чего второе?
- Однобуквенные имена переменных, даже там где их назначение не очевидно
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345052
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИли ты опять про то что свои велосипеды лучше.
принимаются любые предложения , даже не очевидные, лишь бы ускорилось

- Странные условия выхода из цикла
- Почему-то два одинаковых условия выхода из цикла в 2х разных местах. Для чего второе?
- Однобуквенные имена переменных, даже там где их назначение не очевидно


step-- != 0 - сначало происходит сравнение , потом уменьшение

Код: java
1.
2.
3.
4.
                        if (step == 0) {
                            break;  // это нужно , чтоб не выполнялась следующая строка
                        }
                        bi = bi2.getSubimage(0, 0, w.intValue(), h.intValue()); // эта и ниже 


однобуквенные -ширина и высота.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345060
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и что происходит с памятью
при таких операциях в цикле
Код: java
1.
2.
3.
[SRC JAVA]tr = new AffineTransform();
op = new AffineTransformOp(tr, AffineTransformOp.TYPE_BICUBIC);
bi2 = new BufferedImage(w.intValue(), h.intValue(), bi.getType());

[/SRC]
каждый раз выделяется новое? тогда когда старое доступно для использования?
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345066
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
афинные преобразования тут не нужны - изображение не вращается, и уменьшается в одинаковых пропорциях. Сразу рисуем в уменьшенное изображение:
Код: java
1.
2.
3.
4.
5.
6.
7.
Graphics2D graphics = bi2.createGraphics();
try {
	graphics.setRenderingHints(hints);
	graphics.drawImage(bi, 0, 0, w, h, null);
} finally {
	graphics.dispose();
}


ну и в хинтах настойчиво рекомендую билинейную интерполяцию: изображение каждый раз уменьшается в 2 раза либо меньше, таким образом билинейной интерполяции достаточно для покрытия всех пикселей исходного изображения. Чуть хуже качество, а скорость заметно выше.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345082
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz- Почему-то два одинаковых условия выхода из цикла в 2х разных местах. Для чего второе?
очевидно же - оптимизирует человек, не хочет делать лишних действий (на последнем шаге подготовка к следующему не нужна). :)

P.S. На что только люди не пойдут ради теплого лампового звука.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345088
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяи что происходит с памятью
каждый раз выделяется новое? тогда когда старое доступно для использования?
Это ж java - забей.

С другой стороны, народ недоумевает, почему вместо того, чтоб сделать bi=bi2, ты из bi2 вырезаешь фрагмент равный самому bi2. Или там какие-то камни?
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345089
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraСразу рисуем в уменьшенное изображение
В предыдущих версиях JDK качество этого подхода было очень сомнительным. Отсюда и попытки сделать лучше. Но смысл многоходного уменьшения, если blur дает результат не хуже, я не очень понимаю.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345093
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz если blur дает результат не хуже
Мы же говорим о субъективных предпочтениях. Понятно, что и то и другое вносит дополнительные искажения, вопрос лишь в том, какие глазу приятнее.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345101
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некоторые сами сплайны запрограммировать предпочитают.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345104
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевМы же говорим о субъективных предпочтениях. Понятно, что и то и другое вносит дополнительные искажения, вопрос лишь в том, какие глазу приятнее.
Вы что-то путаете. Вадя говорит об уменьшении, а не увеличении изображения. У этих двух задач слегка разные проблемы.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345112
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Проблема одна - набегают искажения. Выражается по разному.

Те же проблемы у фанатов правильных шрифтов, быстро не качественно, качественно - мыло и муар.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345115
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Но смысл многоходного уменьшения, если blur дает результат не хуже, я не очень понимаю.
я проверял всякие преобразования...какие бы не были - шаг должен быть не более 2 .
авторС другой стороны, народ недоумевает, почему вместо того, чтоб сделать bi=bi2, ты из bi2 вырезаешь фрагмент равный самому bi2. Или там какие-то камни?
это вроде только присваивает ссылку на объект.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345120
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczSQL2008Алгоритм зависнет при входе в цикл с step = -1.
И больше вас ничего в этой каше не смущает?
Вообще мне кажется, что алгоритм нерабочий.
Попытка сохранить файл после прохождения всего цикла!?
Я бы сделал так, коль на то пошло
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
   do{
                        tr = new AffineTransform();
                        tr.scale(trans, trans);
                        op = new AffineTransformOp(tr, AffineTransformOp.TYPE_BICUBIC);
                        bi2 = new BufferedImage(w.intValue(), h.intValue(), bi.getType());
                        op.filter(bi, bi2);
                        if (step > 0) {                           
                           bi = bi2.getSubimage(0, 0, w.intValue(), h.intValue());

                           trans = .5;
                           w = w / 2;
                           h = h / 2;
                      
                           try {
                                   UUID uuid = UUID.randomUUID();
                                   ImageIO.write(bi2, "jpg", new File("C:\\Temp\\xxx\\" + uuid.toString() + ".jpg"));
                           } catch (IOException ex) {
                                    Logger.getLogger(Page5.class.getName()).log(Level.SEVERE, null, ex);
                             }
                        }
   } while (step-- >=0);
}


Но не уверен в том, что именно хотел автор.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345123
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев Те же проблемы у фанатов правильных шрифтов, быстро не качественно, качественно - мыло и муар.
Брр. Шрифты это вектор. Они тут вообще не при чем.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345126
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008Попытка сохранить файл после прохождения всего цикла!?

Но не уверен в том, что именно хотел автор.

Автор делает преобразование матрицы из N*M в K*L. Последовательными итерациями.
Промежуточные результаты его не волнуют.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345128
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя авторАлгоритм зависнет при входе в цикл с step = -1. ситуация исключена
У меня препод по программированию всегда требовал проверять алгоритм на крайние значения (минимум и максимум) входных параметров.
Аргументы типа "Такого значения не может быть при вызове процедуры" приводили к автоматическому снижению оценки на 1 балл.

Я с ним полностью согласен.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345130
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевSQL2008Попытка сохранить файл после прохождения всего цикла!?

Но не уверен в том, что именно хотел автор.

Автор делает преобразование матрицы из N*M в K*L. Последовательными итерациями.
Промежуточные результаты его не волнуют.
т.е. файлы полученных изображений не сохраняются?
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345132
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://stackoverflow.com/questions/24745147/java-resize-image-without-losing-quality
Есть же отличный пост с примерами. Там и про производительность и про качество картинки.
Зачем свой лисопед городить-то?
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345134
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяя проверял всякие преобразования...какие бы не были - шаг должен быть не более 2 .
По-моему это не так. Просто размытие должно быть с достаточно большим радиусом. Если ты размоешь в пару пикселей, а уменьшишь в 10 раз, очевидно что никакого эффекта не будет.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345137
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczБрр. Шрифты это вектор. Они тут вообще не при чем.
А монитор то пиксельный. И изгибы и наклоны становятся лесенкой.

Собственно отсутствие плавности переходов и лесенка и есть основные проблемы в построении пиксельного изображения из другого изображения. Хоть сжатие картинки, хоть вектор, хоть 3D.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345138
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008т.е. файлы полученных изображений не сохраняются?
Он же не пирамиду разрешений строит.
Строил бы пирамиду - тогда да.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345139
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадя шаг должен быть не более 2 .
По-моему это не так.
Он про степень сжатия, а не замыливание. Я ж говорю, кто какие искажения предпочитает...
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345142
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевSQL2008т.е. файлы полученных изображений не сохраняются?
Он же не пирамиду разрешений строит.
Строил бы пирамиду - тогда да.
Да, я понял.
Часть кода просто как артефакт, тут не нужна и выдернута из контекста
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345147
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
всё это читал, и пробовал многое. самое оптимальное именно такой, наилучшее качество...
вот тут есть аналогичный вариант на js.
https://github.com/JonHappy/EX_template

авторт.е. файлы полученных изображений не сохраняются?
только конечный результат.

авторУ меня препод по программированию всегда требовал проверять алгоритм на крайние значения (минимум и максимум) входных параметров.
Аргументы типа "Такого значения не может быть при вызове процедуры" приводили к автоматическому снижению оценки на 1 балл.

Я с ним полностью согласен.
а вы код внимательно просмотрели? наверно заметили, что начальных вычислений нет... так и нет проверки некоторых условий. зачем они здесь?
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345154
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008У меня препод по программированию всегда требовал проверять алгоритм на крайние значения (минимум и максимум) входных параметров.
Аргументы типа "Такого значения не может быть при вызове процедуры" приводили к автоматическому снижению оценки на 1 балл.

Я с ним полностью согласен.
Ну, с точки зрения твоего препода ещё и для выхода из цикла нужно больше\меньше использовать, а то, не дай бог, один индекс пропустим.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345155
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевОн про степень сжатия, а не замыливание.
Я понимаю прекрасно.

Сергей АрсеньевЯ ж говорю, кто какие искажения предпочитает...
Не совсем. Одни искажения теряют информацию, другие её размывают. В этом ключевая разница.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345161
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

А зачем размеры объектами?
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345164
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Если бы мне нужна была такая задача и с перформансом, я бы на Java вообще не заморачилвася, а нашел бы удовлетворяющую по скорости программу и запускал бы её отдельным процессом.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345170
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторBlazkowicz,
всё это читал, и пробовал многое. самое оптимальное именно такой, наилучшее качество...
Вот сказки то.
Давай завтра сравним твоё и библиотечное выше по ссылке.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345176
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадя,

А зачем размеры объектами?
не понял.
авторВот сказки то.
Давай завтра сравним твоё и библиотечное выше по ссылке.
это правда , пока к этому пришёл https://github.com/JonHappy/EX_template
мой вариант меня по качеству устраивает, просто когда с клиента приходит 50 картнок 2500*3500 точек хчется ускориться
ели что-то будет быстрее возьму на вооружение
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345183
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяBlazkowiczвадя,

А зачем размеры объектами?
не понял.


Код: java
1.
2.
3.
4.
(w.intValue(), h.intValue(),
w.intValue(), h.intValue());
w = w / 2;
h = h / 2;


Что тут такого чего нельзя сделать на примитивах? Оно на производительносить, понятное дело, не особо влияет. Но синтаксического шума добавляет прилично.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345190
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
не задумывался, основу взял на просторах инета.
доработал под шаги
ранее идут вычисления
Код: java
1.
2.
3.
4.
int step = (int) Math.ceil(Math.log(size / max) / Math.log(2.0));
double   trans = Math.pow(2, step - 1);
Double w = maxWidth * trans;
Double h = ((double) bi.getHeight() / (double) bi.getWidth()) * maxWidth * trans;
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345193
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадямой вариант меня по качеству устраивает, просто когда с клиента приходит 50 картнок 2500*3500 точек хчется ускориться
ели что-то будет быстрее возьму на вооружение
Поставь второй сервер и обрабатывай по 25 на каждом. И не парь мозги с алгоритмом. А то и быстро надо и красиво и на одном процессоре. А про то что выбрать можно только 2 почему-то забыл.
Сейчас вообще-то и процы десятиядерные вполне вменяемых денег стоят. С двухпроцессорной мамкой - 20 честных потоков.

Хочешь дешевле - купи любую актуальную видюху, и перепиши алгоритм на CUDA. Оно твои 50 картинок съест за доли секунд.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345196
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345221
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
я понимаю юмор, но в данном случае, я просто обратился из-за того , что засомневался, что может что-то напутал или не оптимально применил.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345230
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяавторВот сказки то.
Давай завтра сравним твоё и библиотечное выше по ссылке.
это правда , пока к этому пришёл https://github.com/JonHappy/EX_template
мой вариант меня по качеству устраивает, просто когда с клиента приходит 50 картнок 2500*3500 точек хчется ускориться
ели что-то будет быстрее возьму на вооружение
ещё раз.
Предлагаю завтра сравнить алгоритмы.
Ты мне выше пишешь про JS.
Мы ведь про Java код на сервере?
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345235
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПредлагаю завтра сравнить алгоритмы.
жду с нетерпением
авторТы мне выше пишешь про JS.
Мы ведь про Java код на сервере?
мне нужен код на java
но алгоритм один и там и там. на js было необходимо получить превьюшку высотой 60px из полноразмерной картинки и без "половинного деления" не получалось.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345239
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Сэмпл дай, а то у каждого своё понимание о качестве.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345242
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяBlazkowicz,
я понимаю юмор, но в данном случае, я просто обратился из-за того , что засомневался, что может что-то напутал или не оптимально применил.
Схера ли это юмор? Это инженерный подход к решению задач. А у тебя получается "вот у меня 2 строчки кода, как мне их поменять местами чтобы было быстрее? (сам код менять нельзя, иначе не красиво)"
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345251
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадя,

Сэмпл дай, а то у каждого своё понимание о качестве.
проще код.
требования нормализовать картинку по ширине 600px, т.е. maxWidth=600, высота как получится , пропорции сохраняются
входные картинки - фотки со смартфона 2500+ х 3500+ точек

код абсолютно сырой, одно достоинство - работоспособный, поэтому поводу прошу не высказываться.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
private void processImage(int maxWidth, int maxHeight, ByteBuffer src) {
        try {
            InputStream in;
            in = new ByteArrayInputStream(copyOfRange(src.array(), 24, src.limit())); //24 - это место откуда у меня начинается бинарный код jpg картинки, 
            BufferedImage bi = ImageIO.read(in);

            double max;
            int size;
            int ww = maxWidth - bi.getWidth();
            int hh = maxHeight - bi.getHeight();

            if (ww < 0 || hh < 0) {
//                if (ww < hh) {
//                    max = maxWidth;
//                    size = bi.getWidth();
//                } else {
//                    max = maxHeight;
//                    size = bi.getHeight();
//                }
                max = maxWidth;
                size = bi.getWidth();

                if (size > 0 && size > max) {
                    double trans;
                    AffineTransformOp op;
                    BufferedImage bi2 = null;
                    AffineTransform tr;

                    int step = (int) Math.ceil(Math.log(size / max) / Math.log(2.0));
                    trans = Math.pow(2, step - 1);
                    Double w = maxWidth * trans;
                    Double h = ((double) bi.getHeight() / (double) bi.getWidth()) * maxWidth * trans;
                    trans = h / bi.getHeight();

                    while (step-- != 0) {
                        tr = new AffineTransform();
                        tr.scale(trans, trans);
                        op = new AffineTransformOp(tr, AffineTransformOp.TYPE_BICUBIC);
                        bi2 = new BufferedImage(w.intValue(), h.intValue(), bi.getType());
                        op.filter(bi, bi2);
                        if (step == 0) {
                            break;
                        }
                        bi = bi2.getSubimage(0, 0, w.intValue(), h.intValue());

                        trans = .5;
                        w = w / 2;
                        h = h / 2;

                    }
                    try {
                        UUID uuid = UUID.randomUUID();
                        ImageIO.write(bi2, "jpg", new File("C:\\Temp\\xxx\\" + uuid.toString() + ".jpg"));
                    } catch (IOException ex) {
                        Logger.getLogger(Page5.class.getName()).log(Level.SEVERE, null, ex);
                    }

                }
            }
        } catch (IOException ex) {
            Logger.getLogger(Page5.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345258
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz(сам код менять нельзя, иначе не красиво)
)) вадя в своём стиле).
вадяжду с нетерпением
да!
У меня проект завтра как раз на сжатие).
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345263
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
я про алгоритм, код пожалуйста.
я прошел путь выбора алгоритма, поэтому знаю о чём говорю.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345283
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяя прошел путь выбора алгоритма, поэтому знаю о чём говорю.
да кто же тебе поверит....на словах? )))
19879740
Потом будешь говорить, что у тебя тоже самое).
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345298
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНе совсем. Одни искажения теряют информацию, другие её размывают. В этом ключевая разница.
Это ты хорошо сказал.

P.S. Разница в алгоритмах восстановления картинки в системе глаз-мозг человека. Ну и исходном материале. Одни искажения будут лучше подходить другие хуже. Но увы информация будет теряться всегда (в отличии, как ты правильно заметил от увеличения - там ее надо придумывать).
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345300
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Давай завтра сравним твоё и библиотечное выше по ссылке.
Так там по ссылке один из вариантов его и есть. 1/2 step Bicubic Progressive Scaling называется. Если я чего не путаю.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345366
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,
ТС он? Вот и пусть работает, доказывает кодом что у него не хуже.
А обычно у него таки хуже.).
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345368
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
всё-таки можешь объяснить, зачем здесь афинные преобразования? Пропорции картинки не меняются, нет вращения, ведь очевидно, что результат будет тот же, что и для graphics.drawImage. Нафига решать систему уравнений, если ответ известен? Вот же оно то место, где явно пустая работа делается
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345376
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraвсё-таки можешь объяснить, зачем здесь афинные преобразования?
Картинку сглаживать же. Метод интерполяции на это влияет.

P.S. Возможно действительно можно оставить кубическую аппроксимацию только для некратного сжатия, а последующие кратные 2-м делать линейными. Скорее всего результат будет не сильно отличаться. Но Вадя гонится за качеством.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345381
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ТС он? Вот и пусть работает, доказывает кодом что у него не хуже.
А обычно у него таки хуже.).
Так он же и показал. У него действительно последовательно сжатие с двумерной кубической интерполяцией и шагом 1/2.
Единственное IMHO лишними выглядят телодвижения с getSubImage и проверкой последнего шага. Но по сравнению с математикой в алгоритме это копейки.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345386
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньевivanraвсё-таки можешь объяснить, зачем здесь афинные преобразования?
Картинку сглаживать же. Метод интерполяции на это влияет.
Интерполяция применяется и в drawImage, афинные преобразования в данном случае не требуются:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Map<Key, Object> hints = new HashMap<Key, Object>();
hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
hints.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
...
Graphics2D graphics = resizedImage.createGraphics();
try {
	graphics.setRenderingHints(hints);
	graphics.drawImage(source, 0, 0, width, height, null);
} finally {
	graphics.dispose();
}
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345396
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,
Показал качество сжатия? Время работы? Сравнительный тест?
As is to be.
У него всегда так - кинул код, разбирайтесь сами.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345422
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraИнтерполяция применяется и в drawImage, афинные преобразования в данном случае не требуются:
ЕМНИП геометрическое сжатие картинки это и есть частный случай афинных преобразований.

P.S. https://docs.oracle.com/javase/8/docs/api/java/awt/RenderingHints.html#KEY_ANTIALIASING Antialiasing hint key. The ANTIALIASING hint controls whether or not the geometry rendering methods of a Graphics2D object will attempt to reduce aliasing artifacts along the edges of shapes .
На текстуры не должен действовать. :(
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345433
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей АрсеньевЕМНИП геометрическое сжатие картинки это и есть частный случай афинных преобразований.
Вот я и говорю об идентичности результатов. Рисуем сразу, не решая уравнений.

А еще в приведенном коде режет глаз нахождение целого логарифма по основанию 2, ну и возведение 2 в степень тоже.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345437
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraВот я и говорю об идентичности результатов. Рисуем сразу, не решая уравнений.
За нас их решит Graphics2D. Правда и у TC это делает AffineTransformOp. :)
ivanraА еще в приведенном коде режет глаз нахождение целого логарифма по основанию 2, ну и возведение 2 в степень тоже.
Ну это теплый ламповый звук. Картинка полученная методом последовательных приближений с накоплением ошибок выглядит субъективно лучше сделанной за один проход.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345464
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА еще в приведенном коде режет глаз нахождение целого логарифма по основанию 2, ну и возведение 2 в степень тоже.
это мелочи, зато хорошо показывает алгоритм получения значения.

авторУ него всегда так - кинул код, разбирайтесь сами.
там всё элементарно
дай твой код , я разберусь, чтоб сравнить.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345483
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Я велосипеды не пишу. Выше ссылку на код 3 раза давал.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345808
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Код: java
1.
in = new ByteArrayInputStream(copyOfRange(src.array(), 24, src.limit())); //24 - это место откуда у меня начинается бинарный код jpg картинки,


занафига тут эта строка и почему в процедуре не входной параметр стрим картинки?
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345817
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
тебе по оформлению кода и по уважению к мемберам читающим твой код - сюда. В первый класс:
Передать в Java BLOB и получить BLOB.
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345852
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяавторУ него всегда так - кинул код, разбирайтесь сами.
там всё элементарно
угу.
Мольбам юзверей с твоим кодом ты не внемлешь)))).
Так что давай со своим кодом сам.
А я с библиотекой по ссылке выше.
Итак:
- у меня юзвери (негодяи) сканируют 20 страниц документа в PDF и кидают в систему.
Т.к. их никто пока не ограничил), то они сканируют обычно вот так
(пример в сети абстрактный)
http://gump74.ru/media/docs/2014/10/22/1-list-polozheniya-s-pechatyami.jpg
разрешение 2480x3507 умноженное на 20 страниц и в систем у))).
Теперь ты уменьшай своим кодом насколько возможно и выложи результат.
Я выложу тоже
Код: java
1.
2.
3.
4.
5.
6.
7.
			
import org.imgscalr.Scalr;
...
File image = new File("c:\\_Buffer\\16.jpg");
BufferedImage img = ImageIO.read(image);
BufferedImage thumbnail = Scalr.resize(img, 800);
ImageIO.write(thumbnail, "jpg", new File("c:\\_Buffer\\16out.jpg"));
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345863
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выход с настройками по умолчанию
566х800 - 88,7Kb
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345866
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
по времени сам померяй.
Удачи!
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345905
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
измерялось так
Код: java
1.
2.
3.
        st = System.nanoTime();
        processImage(600,  bb);
        System.err.println(System.nanoTime()-st);


838 299 619 мой метод
2 952 740 436 твой
...
Рейтинг: 0 / 0
Можно ли это ускорить
    #39345907
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
спасибо , вопрос решён
...
Рейтинг: 0 / 0
76 сообщений из 76, показаны все 4 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Можно ли это ускорить
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]