2015-10-29 4 views
1

У меня есть рукописный текст в качестве объекта BufferedImage. Мне нужно сгенерировать его как файл изображения tiff с техникой сжатия CCITT T.4.Как создать tiff-изображение с использованием метода CCITT T.4 для изображений с прозрачным фоном

Но CCITT T.4 требует, чтобы изображение было 1-битовым изображением глубины. Мое изображение в BufferedImage имеет глубину в 32 бит. Когда я конвертирую его в 1 бит, используя convert1() funtion, черная рукопись исчезает, и все изображение становится черным.

Я читал в другом месте, что как 1-битные изображения черные & белые, поэтому при преобразовании в 1 бит он преобразует прозрачные биты слоя в черный. Мои рукописные заметки тоже черного цвета, поэтому все изображение становится черным.

Я могу генерировать tiff используя технику LZW без проблем. и даже с CCITT T.4, но только на 24-битных изображениях. Когда изображение 32 бит (с дополнительным уровнем прозрачности), изображение становится черным. Может ли кто-нибудь объяснить мне, как преобразовать изображение в формат CCITT T.4 для изображений с прозрачностью.

+1

Вы пробовали положить изображение на белом фоне перед преобразованием? Если ваше изображение прозрачно с черным текстом, вы также можете нарисовать полностью непрозрачный белый прямоугольник «позади» вашего текста, используя правильный режим Porter/Duff (я думаю, что это «DstAtop», см. Класс «AlphaComposite»). – haraldK

+0

Я добавил AlphaComposite.DsAtop, а затем использовал метод setPaint White и fillrect, чтобы установить фон как белый и теперь его работу. Благодаря тонну! Тем не менее, черный текст, написанный вручную, по-прежнему не является непрерывным. Линии идут как сломанные (пунктирные) линии. Любые идеи о том, как сгладить линии? –

+0

Не совсем уверен, как работает метод 'convert1()' (и у меня нет почерка), поэтому я только догадываюсь. Обычно вы можете настроить пороговое значение, чтобы сделать больше или меньше пикселей черным. Или вы можете попытаться настроить яркость/контраст, используя ['RescaleOp'] (http://stackoverflow.com/a/3433298/1428606). – haraldK

ответ

1

Благодаря ценным указателям от haraldK я смог преобразовать 32-битное изображение TIF в 1-битное изображение и сжать его с использованием сжатия CCiTT T.4. Полученное изображение становится четким и не имеет разрывов в строке.

Вот мой модифицированный код:

BufferedImage image32bit; 
//image32bit is populated 

Graphics2D g=(Graphics2D)image.createGraphics(); 

AlphaComposite ac=AlphaComposite.getInstance(AlphaComposite.DST_ATOP,0.85f); 
//0.85f is the opacity threshold value to make more or less pixels black. 

g.setColor(Color.WHITE); 
g.fillRect(0,0,image.getWidth(),image.getHeight()); 
g.dispose() 

//Convert to monochrome 1 bit image using image4j jar - convert1 method 
BufferedImage singleBitImage=ConvertUtil.convert1(image32bit); 

//Use JAI jar to set compression as CCITT T.4 and write out the image 
//Insert code to create writer and writeParam ... 
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
writeParam.setCompressionType("CCITT T.4"); 

writer.write(null, iioImage, writeParam); 

 Смежные вопросы

  • Нет связанных вопросов^_^