powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Смасштабировать картинку без искажений
18 сообщений из 18, страница 1 из 1
Смасштабировать картинку без искажений
    #38326841
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как смасштабировать картинку без искажений.
Нужно смасштабировать штрих-код.



Пробовал так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
BufferedImage im = resizeImage(image, image.getType());
...
...
...
    private BufferedImage resizeImage(BufferedImage originalImage, int type) {

	BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
	Graphics2D g = resizedImage.createGraphics();
	g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
	g.dispose();	
	g.setComposite(AlphaComposite.Src);
 
	g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
	RenderingHints.VALUE_INTERPOLATION_BILINEAR);
	g.setRenderingHint(RenderingHints.KEY_RENDERING,
	RenderingHints.VALUE_RENDER_QUALITY);
	g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
	RenderingHints.VALUE_ANTIALIAS_ON);
        return resizedImage;
    }



Пробовал это:
http://www.mkyong.com/java/how-to-resize-an-image-in-java/

Картинка из большой в маленькую масштабируется с искажениями!
Как картинку смасштабировать без искажений???
Пробовал с использованием какой-то библиотеки: https://github.com/thebuzzmedia/imgscalr/downloads:
Код: sql
1.
2.
3.
4.
    private BufferedImage resizeImage(BufferedImage originalImage, int type) {
        BufferedImage resizedImage = Scalr.resize(originalImage, Method.QUALITY, 800, 600);
        return resizedImage;
    }
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326850
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл пояснить зачем это всё надо.
Там картинка штрих-кода. На ней видно, что правые контрольные линии у нижнего штрих-кода, который (!) не читается сканером штрих-кодов (!) немного отличаются от линий верхнего, который читается. Если присмотреться, то нижний чуть-чуть искажён.
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326851
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у вас в оригинальном штрих-коде линии толщиной в 1 пиксель, то при уменьшении, конечно же, теряется информация.
ImageType точно ч\б? Объясните суть задачи, зачем масштабировать штрих код? Это же не фотка.
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326870
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RenderingHints у вас установлены для оптимизации фотографий. Штриходы совсем другое дело. ANTIALIASING нужно выключить 100%.
INTERPOLATION, возможно, тоже.
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326874
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Желательно взять ByteBuffer.TYPE_BYTE_BINARY - никакии градации серого, ведь, не нужны. ColorModel можно не задавать, он, согласно JavaDoc, будет по-умолчанию двухцветным для этого типа.
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326875
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть в том, чтобы сделать небольшую утилиту, которая бы подкладывала (оригинальный штрих-код размером примерно 3000x3000 пикселей) смасштабированный нужным образом штрих-код другой программе без искажений.
Мне кажется тут с интерполяцией какая-то проблема.
3000x3000 --> 500x500, например, должно происходить без искажений, так как 3000x3000 сильно избыточен.
Алгоритм какой-то неправильный, который вносит потери.
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326882
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Суть в том, чтобы сделать небольшую утилиту, которая бы подкладывала (оригинальный штрих-код размером примерно 3000x3000 пикселей) смасштабированный нужным образом штрих-код другой программе без искажений.
Мне кажется тут с интерполяцией какая-то проблема.
3000x3000 --> 500x500, например, должно происходить без искажений, так как 3000x3000 сильно избыточен.
Алгоритм какой-то неправильный, который вносит потери.
Начнити с того что уберите все rendering hints. Оставьте только
Код: java
1.
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);


Чтобы наверняка убрать антиалиасинг. И используйте тип, который я указал выше.
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326908
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не читается.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
	Graphics2D g = resizedImage.createGraphics();
	g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
	g.dispose();	
	g.setComposite(AlphaComposite.Src);
 
//	g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
//	RenderingHints.VALUE_INTERPOLATION_BILINEAR);
//	g.setRenderingHint(RenderingHints.KEY_RENDERING,
//	RenderingHints.VALUE_RENDER_QUALITY);
//	g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
//	RenderingHints.VALUE_ANTIALIAS_ON);
        
        
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326917
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что куда не читается? Будем опять искать телепатов? Кстати, забавно, что вы сначала вызываете отрисовку, а потом уже пытаетесь установить настройки для этой отрисовки.
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326970
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сканер штрих-кодов не читает смасштабированную картинку.
Код: sql
1.
2.
3.
4.
5.
6.
	BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
	Graphics2D g = resizedImage.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
	g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
	g.dispose();	
	g.setComposite(AlphaComposite.Src);
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326979
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Сканер штрих-кодов не читает смасштабированную картинку.
То есть нам предстоит самим догадаться почему? Так как приаттачить новый результат это черезмерное усилие. Удачи!
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326982
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, вот он.
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326984
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё равно искажает.
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38326996
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вижу градации серого. Мой совет про ImageType вы проигнорировали.
Интерено откуда взялось значение 500. Очевидно, что исходя из строгого требования к сохранению пропорций, стоит использовать масштабиронивае кратное двум. 3000->1500->750->375. Тогда вероятность искажения будет минимальной.
Попробуйте так же с разными значениями интерполяции.
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38327018
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если это алгоритм для jpeg, то опция blur как раз отвечает за замыливание, может и там есть такой параметр...
p.s. просто мысли влух...
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38327034
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174если это алгоритм для jpeg
Facepalm. Это алогоритм для растра. JPEG это лишь формат сжатия растра в массив байт (обычно файл).

rema174то опция blur как раз отвечает за замыливание
Речь про фотошоп? Blur это размытие растра. Здесь оно возникает по причине анти-алиасинга и по причине того что растр разноцветный, а не монохромный.
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38327052
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не-не-не.
Я просто не писал, но параметр я устанавливал.

BufferedImage image = new BufferedImage(ss, ss, BufferedImage.TYPE_BYTE_BINARY);
...
Рейтинг: 0 / 0
Смасштабировать картинку без искажений
    #38327782
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче, решил проблему так, надеюсь, что решил.
Ширина самых тонких линий в моём штрих-коде 10px.
Соответственно, я могу масштабировать картинку без потерь с коэффициентами: 1, 2, 5 и 10.
Пробовал печатать разные картинки на принтере и сканировать. Сканер штрих-кодов всё распознаёт.
Код вот такой получился:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    private BufferedImage resizeImage(BufferedImage originalImage, int type) {
        int height=originalImage.getHeight();
        int width=originalImage.getWidth();
        //int ko=Double.valueOf(Math.ceil(height/IMG_HEIGHT)).intValue();
        int ko=1;
        if(height/2<=IMG_HEIGHT){
            ko=2;
        }
        else if(height/5<=IMG_HEIGHT){
            ko=5;
        }
        else if(height/10<=IMG_HEIGHT){
            ko=10;
        }
	BufferedImage resizedImage = new BufferedImage(width/ko, height/ko, type);
	Graphics2D g = resizedImage.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
	g.drawImage(originalImage, 0, 0, width/ko, height/ko, null);
	g.dispose();	
	g.setComposite(AlphaComposite.Src);
        return resizedImage;
    }
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Смасштабировать картинку без искажений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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