powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Передать в Java BLOB и получить BLOB.
25 сообщений из 26, страница 1 из 2
Передать в Java BLOB и получить BLOB.
    #39342557
karlov69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет знатокам Java!
К которым себя не отношу.
Есть код, который преобразует файл BMP в файл PNG с добавлением альфа канал:
Код: 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.
import java.awt.Color;
import java.awt.image.BufferedImage; //This class will read the incoming BMP image
import javax.imageio.ImageIO; //This class will convert BMP to PNG
import java.io.File;

public class bmp2png {
    public static void convert(String inputfileName, Color color) throws Exception {
             BufferedImage input_image = null;
             File f = new File(inputfileName);
             input_image = ImageIO.read(f); //read bmp into input_image object

          BufferedImage image = new BufferedImage(input_image.getWidth(), input_image.getHeight(), BufferedImage.TYPE_INT_ARGB);
             image.getGraphics().drawImage(input_image, 0x00, 0x00, null);             
             for (int i = 0x00; i < image.getWidth(); i++) {
                   for (int j = 0x00; j < image.getHeight(); j++) {
                       if ((image.getRGB(i, j) | 0xFF000000) == (color.getRGB() | 0xFF000000)) {
                           image.setRGB(i, j, 0x00000000);
                       }
                   }
               }          
             File outputfile = new File( "imageio_png_output.png"); //create new outputfile object
             ImageIO.write(image, "PNG", outputfile); //write PNG output to file         
       }
}


Как переделать код, чтобы на входе вместо имени файла был BLOB и на выходе BLOB?
Т.е. как в BufferedImage input_image передать BLOB и получить его из BufferedImage image.
СУБД Oracle11g.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342562
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучите классы InputStream и OutputStream. Через эти две абстракции можно организовать ввод\вывод как в файл, так и в BLOB.
Конкретно ваш вопрос про BLOB выглядит забавно, так как для BLOB нужно ещё подключение к БД и запросы, которых в приведенном коде нет.
Покажите как пробовали и что не получилось.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342574
karlov69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class bmp2png {
    public static void convert(String inputfileName, Color color, oracle.sql.BLOB Value) throws Exception {
             BufferedImage input_image = null;
input_image = Value.getBinaryStream();
//input_image = new ImageIcon(Value.getBytes(1, (int) Value.length()));
          BufferedImage image = new BufferedImage(input_image.getWidth(), input_image.getHeight(), BufferedImage.TYPE_INT_ARGB);

             image.getGraphics().drawImage(input_image, 0x00, 0x00, null);             
             for (int i = 0x00; i < image.getWidth(); i++) {
                   for (int j = 0x00; j < image.getHeight(); j++) {
                       if ((image.getRGB(i, j) | 0xFF000000) == (color.getRGB() | 0xFF000000)) {
                           image.setRGB(i, j, 0x00000000);
                       }
                   }
               }          
             File outputfile = new File( "imageio_png_output.png"); //create new outputfile object
             ImageIO.write(image, "PNG", outputfile); //write PNG output to file         
       }
}
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342576
karlov69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подключения я опустил, чтобы не загромождать.
А запросов нет, т.к. на входе получаем уже выбранный BLOB.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342626
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karlov69Как переделать код, чтобы на входе вместо имени файла был BLOB и на выходе BLOB?
Вариант1
Код: java
1.
convert(ResultSet rs, int i {


а снаружи цикл по ResultSet с передачей i для ProgressBar
2. Я бы не писал в эту же запись при конвертировании, а создал ещё одно поле в табле и писал туда.
Если глюков не было, то потом одной командой всё заменил.
ЗЫ
Как из ResultSet взять блоб наверно в курсе.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342641
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karlov69,
т.е. получается что у тебя всё есть на входе. Нужно только передать Connection для вставки нового БЛОБ.
Т.к. у меня например, курсор читающий и вставляю в другое новое поле.
IMHO
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342644
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karlov69,

1) Нужно два блоба, один на чтение, второй на запись
2) Я же вам указал на Input/OutputStream. Не стоит метод перекодирования изображения привязывать к JDBC API. Используется Input/OutputStream для обмена между методом перекодировки и методом работы с JDBC.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342645
karlov69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Я читаю BLOB из одного поля, а вставляю в другое.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342650
karlov69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Спасибо, буду читать.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342653
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karlov69Petro123,
Я читаю BLOB из одного поля, а вставляю в другое.
тогда как у меня. Только проект не закончен - в разработке.
Из отрицательного ещё то, что при блобах 200-300 мегов память кончается)).
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342656
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123karlov69Petro123,
Я читаю BLOB из одного поля, а вставляю в другое.
тогда как у меня. Только проект не закончен - в разработке.
Из отрицательного ещё то, что при блобах 200-300 мегов память кончается)).
PipedInputStream не спасает?
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342666
karlov69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
У меня BLOB-ы маленькие.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342677
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczPipedInputStream не спасает?
попробую. Спс.
Но не понял как он поможет?
- в иклипсе поставил
-Xms256m
-Xmx1024m
Это ведь мало. Нужно пару гигов, а пишут что в винде проблема.
Тут три класса вроде читают это PDF в оперативку. И нужно поболее памяти.
Чуть позже отпишусь.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342686
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Так не пиши ничего в оперативку. Запускай фоновый поток, который формирует документ и вешай его на Piped Stream в фоновом потоке . А при работе с базой скорми другую сторону трубы в JDBC, чтобы драйвер читал данные из InputStream, когда они нужны, а не из памяти. Тут, конечно, ещё зависит от реализации драйвера. Но мне, кажется должно, минимизировать расход по памяти. Но будет немного медленнее из-за блокировок
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342703
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczТак не пиши ничего в оперативку.
это не понял.
- задача взять с бд PDF и сжать его.
Код: java
1.
2.
InputStream inpstrBlob = rs.getBinaryStream("f_data");
PdfReader pdfreader = new PdfReader(inpstrBlob);


первая строка вобрала в память.
Вторая строка дополнительно (так думаю) берёт ещё 200 мегов.
На второй строке райзе и на след. итерации нехватка памяти.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342707
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczчтобы драйвер читал данные из InputStream
вроде так как ты написал.
Будет время отпишусь. Пока взял файлы поменьше размером.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342795
karlov69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Вроде что-то получилось (запихнуть BLOB в BufferedImage и сконвертить):
Код: 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.
create or replace and compile java source named bmp2png as
import java.awt.Color;
import java.awt.image.BufferedImage; //This class will read the incoming BMP image
import javax.imageio.ImageIO; //This class will convert BMP to PNG
import java.io.*;
import oracle.sql.BLOB;

public class bmp2png {
    public static BLOB convert(Color color, oracle.sql.BLOB Value) throws Exception {
//             InputStream in = Value.getBinaryStream();
//             BufferedImage image = ImageIO.read(in);

             BufferedImage Image = ImageIO.read(Value.getBinaryStream());
             OutputStream out = Value.setBinaryStream(0);

             Image.getGraphics().drawImage(Image, 0x00, 0x00, null);
             for (int i = 0x00; i < Image.getWidth(); i++) {
                   for (int j = 0x00; j < Image.getHeight(); j++) {
                       if ((Image.getRGB(i, j) | 0xFF000000) == (color.getRGB() | 0xFF000000)) {
                           Image.setRGB(i, j, 0x00000000);
                       }
                   }
               }
             ImageIO.write(Image, "PNG", out);
             return out;
       }
}


Только как теперь в Return вывести BLOB?
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342798
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karlov69Вроде что-то получилось (запихнуть BLOB в BufferedImage и сконвертить):

Вы осознаёте то что вы записали PNG в тот же BLOB, из которого прочитали BMP?

karlov69Только как теперь в Return вывести BLOB?
Зачем?
У вашего метода дожна быть следующая сигнатура
Код: java
1.
2.
3.
public static void convertBMPToPNG(Color transparent color, InputStream bmpInput, OutputStream pngOutput) throws Exception {
 ...
}



Работа с БД и BLOB-ами это задача других методов.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342866
karlov69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
А так:
Код: 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.
create or replace and compile java source named bmp2png as
import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.*;
import oracle.sql.BLOB;

class bmp2png {
    public static void convertBMPToPNG(Color color, InputStream bmpInput, OutputStream pngOutput) throws Exception {
           BufferedImage input_image = null;
           input_image = ImageIO.read(bmpInput);
           BufferedImage image = new BufferedImage(input_image.getWidth(), input_image.getHeight(), BufferedImage.TYPE_INT_ARGB);
           image.getGraphics().drawImage(image, 0x00, 0x00, null);
           for (int i = 0x00; i < image.getWidth(); i++) {
                 for (int j = 0x00; j < image.getHeight(); j++) {
                     if ((image.getRGB(i, j) | 0xFF000000) == (color.getRGB() | 0xFF000000)) {
                         image.setRGB(i, j, 0x00000000);
                     }
                 }
           }
           ImageIO.write(image, "PNG", pngOutput);
    }

    public static void convert(oracle.sql.BLOB InBlob, oracle.sql.BLOB OutBlob) throws Exception {
           InputStream bmpInput = InBlob.getBinaryStream();
           OutputStream pngOutput = null;
           convertBMPToPNG(new Color(255,0,255), bmpInput, pngOutput);
           OutBlob = pngOutput;
    }
    
    public static BLOB main(oracle.sql.BLOB InBlob) throws Exception{
          BLOB OutBlob = null;
          convert(InBlob, OutBlob);
          return OutBlob;
    }
}
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342878
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karlov69,
Функции из одной строки не нужны.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342880
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karlov69,

Ну, уже лучше, если не обращать внимание на Coding Convention и Single Responsibility Principle

Но только для того чтобы писать и читать в один и тот же BLOB вам, веротяно, понадобиться Updatable ResultSet
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342891
karlov69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Как все-таки из OutputStream получить BLOB?
При присвоении OutBlob = pngOutput ругается, что неправильный тип.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342898
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karlov69,
Поиск на любой пример записи в блоб.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39342901
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karlov69Как все-таки из OutputStream получить BLOB?
При присвоении OutBlob = pngOutput ругается, что неправильный тип.
Вы не знаете Java, но просите вам объяснить детали работы с JDBC. При этом ещё и про BLOB, что ещё сложнее основ JDBC.
Я даже не знаю как вам ответить. Гугл - create Oracle BLOB, разве что. Ищите примеры работы с BLOB в Java и используйте их.
...
Рейтинг: 0 / 0
Передать в Java BLOB и получить BLOB.
    #39343640
karlov69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Все получилось:
Код: 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.
create or replace and compile java source named bmp2png as
import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.*;
import oracle.sql.BLOB;
import java.sql.*;

class bmp2png {
    public static BLOB convertBMPToPNG(Color color, InputStream bmpInput) throws Exception {
           Connection con = null;
           BLOB OutBlob = null;
           BufferedImage input_image = null;

           con = DriverManager.getConnection("jdbc:default:connection:");
           OutBlob = BLOB.createTemporary(con, true, BLOB.DURATION_SESSION);
           OutputStream pngOutput = OutBlob.getBinaryOutputStream();
           input_image = ImageIO.read(bmpInput);
           BufferedImage image = new BufferedImage(input_image.getWidth(), input_image.getHeight(), BufferedImage.TYPE_INT_ARGB);

           image.getGraphics().drawImage(input_image, 0x00, 0x00, null);
           for (int i = 0x00; i < image.getWidth(); i++) {
                 for (int j = 0x00; j < image.getHeight(); j++) {
                     if ((image.getRGB(i, j) | 0xFF000000) == (color.getRGB() | 0xFF000000)) {
                           image.setRGB(i, j, 0x00000000);
                     }
                 }
           }
           ImageIO.write(image, "PNG", pngOutput);
           return OutBlob;
    }

    public static BLOB convert(oracle.sql.BLOB InBlob) throws Exception{
           InputStream bmpInput = InBlob.getBinaryStream();
           BLOB OutBlob = convertBMPToPNG(new Color(255,0,255), bmpInput);
           return OutBlob;
    }
}


Спасибо.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Передать в Java BLOB и получить BLOB.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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