Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 работа с изображениями в oracle  [new]
eldaeron
Member

Откуда:
Сообщений: 22
добрый день. есть такая проблема, в базе хранятся несколько изображений (blob). необходимо в процедуре обработать и совместить послойно 4-5 различных изображений. насколько это вобще возможно сделать?
1 сен 10, 12:04    [9362550]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18370
Аврора в помощь...
1 сен 10, 12:06    [9362568]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
проходил мимо...
Member

Откуда: от верблюда
Сообщений: 1178
eldaeron,

sttf: dbms_photoshop (не участник форума).
1 сен 10, 12:06    [9362571]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
eldaeron
Member

Откуда:
Сообщений: 22
ладно, тогда кто может в кратце объяснить как работать с ORDImage. что надо подключить, какие коменты есть и прочее...
1 сен 10, 12:52    [9363061]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
eldaeron
Member

Откуда:
Сообщений: 22
eldaeron
какие коменты есть и прочее...

какие команды* :)
1 сен 10, 13:00    [9363171]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
-2-
Member

Откуда:
Сообщений: 15330
eldaeron,

работа с картинками
1 сен 10, 13:05    [9363208]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
eldaeron
Member

Откуда:
Сообщений: 22
ладно, будем конкретизировать.
нашел вот такую процедуру в книжке по адресу http://download.oracle.com/docs/cd/E14072_01/appdev.112/e10776.pdf

-- add text as watermark to source image
DECLARE
source_image ORDSYS.ORDImage;
added_text varchar2(200);
dest_image ORDSYS.ORDImage;
prop ordsys.ord_str_list;
logging VARCHAR2(2000);
BEGIN
select product_photo into source_image from pm.online_media
where product_id = 4001;
select product_photo into dest_image from pm.online_media
where product_id = 4003 for update;
added_text := 'Oracle Multimedia © 2009';
-- specify properties
prop := ordsys.ord_str_list(
'font_name=Times New Roman',
'font_style=bold',
'font_size=50',
'text_color=red',
'position_x=100',
'position_y=100',
'transparency=0.6');
-- add text watermark to source image
source_image.applyWatermark(added_text, dest_image, logging, prop);
update pm.online_media set product_photo = dest_image where product_id = 4003;
commit;
EXCEPTION
WHEN OTHERS THEN
RAISE;


решил начать с малого. имеется таблица PR_IMAGE в ней 2 поля. ID number и IMAGE BLOB
поместил в нее запись ID=1 BLOB = картинка
пишу следующее (SLQ Developer)
DECLARE
source_image ORDSYS.ORDImage;
BEGIN
select image into source_image from pr_image
where id = 1;
END;
выполняю
в ответ получаю следующее:

Error report:
ORA-06550: Строка 4, столбец 8:
PL/SQL: ORA-00932: несовместимые типы данных: ожидается NUMBER, получено BLOB
ORA-06550: Строка 4, столбец 1:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
1 сен 10, 13:13    [9363337]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
-2-
Member

Откуда:
Сообщений: 15330
eldaeron,

полагаю pr_image.image имеет тип blob. Логично, что его нельзя селектить в объектный тип ORDImage.
1 сен 10, 13:25    [9363482]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
eldaeron
Member

Откуда:
Сообщений: 22
вы полагаете правильно :( но как в таком случае быть?
1 сен 10, 13:27    [9363506]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
-2-
Member

Откуда:
Сообщений: 15330
eldaeron,

Несложно догадаться копнуть в сторону конструкторов/статиков соответствующего объектного типа
1 сен 10, 13:51    [9363736]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
eldaeron
Member

Откуда:
Сообщений: 22
так, я завел еще одно поле типа ORDIMAGE, у меня получилось совместить два изображения. как теперь его оттуда выцепить в переменную типа blob?
1 сен 10, 13:53    [9363761]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
-2-
Member

Откуда:
Сообщений: 15330
eldaeron,

"Еще одно поле" с копией может и не стоило "заводить". А вытащить, опять же, несложно догадаться, если не члено-методом, так ордимадже_поле.source.localdata.
1 сен 10, 14:24    [9364111]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
eldaeron
Member

Откуда:
Сообщений: 22
да, спаибо, с этим я уже разобрался:) просто сначала делаю топорно, чтоб просто, но работало) потом усложняю) как теперь можно полученый блоб сохранить в файл на диске где расположен клиент, никто не подскажет?)
1 сен 10, 15:07    [9364624]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
eldaeron
Member

Откуда:
Сообщений: 22
пытаюсь записать blob на диск с помощью такой процедуры.

create or replace directory mydir as 'C:\test';
declare
vBlobData BLOB;
buffer RAW(32767);
amt BINARY_INTEGER := 32767;
f utl_file.file_type;
blob_size integer;
vS_Pos integer:=1;
vBufferLen integer;
vBlobPos integer;
vWriteDataSize integer;
vMaxBufferLen integer := 10000;

BEGIN
select image into vBlobData from pr_image
where id = 5;
blob_size := dbms_lob.getlength(vBlobData);
f:=utl_file.fopen('mydir','pass_foto.jpg','w',32767);
if blob_size <= 32767 then
dbms_lob.read (vBlobData, amt, vS_pos, buffer);
utl_file.put_raw(f,buffer);
else
vWriteDataSize := 0;
vBlobPos := 1;
while vWriteDataSize < blob_size loop
-- определяем размер считываемых из блоба данных
if (blob_size - vWriteDataSize) >= vMaxBufferLen then
vBufferLen := vMaxBufferLen;
else
vBufferLen := blob_size - vWriteDataSize;
end if;
-- считываем данные из блоба
DBMS_LOB.READ(vBlobData, vBufferLen, vBlobPos, Buffer);
-- записываем считанные данные в файл
utl_file.put_raw(f, Buffer);
vBlobPos := vBlobPos + vBufferLen;
vWriteDataSize := vWriteDataSize + vBufferLen;
end loop;
end if;
utl_file.fclose(f);
END;

возвращается такая ошибка:
Error report:
ORA-29280: недопустимый путь доступа к каталогу
ORA-06512: на "SYS.UTL_FILE", line 41
ORA-06512: на "SYS.UTL_FILE", line 478
ORA-06512: на line 17
29280. 00000 - "invalid directory path"
*Cause: A corresponding directory object does not exist.
*Action: Correct the directory object parameter, or create a corresponding
directory object with the CREATE DIRECTORY command.

папка такая на диске имеется, возможно проблема в том что подключаюсь к серверу удаленно, хотя хз...
1 сен 10, 15:29    [9364891]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6729
eldaeron,

eldaeron
A corresponding directory object does not exist.

А вы папку на локальном диске клиента или сервера создали?
И понимаете ли вы что такое directory object?
1 сен 10, 15:32    [9364920]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
eldaeron
Member

Откуда:
Сообщений: 22
ну если я правильно понимаю то directory это объект бд, для выдачи прав пользователям, а папку на диске необходимо создать самому... я создал, но ошибка остается...
1 сен 10, 15:35    [9364959]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
eldaeron
Member

Откуда:
Сообщений: 22
папку создал на диске клиента... на сервере создать проблематично:(
1 сен 10, 15:36    [9364967]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
mmar
Member

Откуда: -)
Сообщений: 391
eldaeron
папку создал на диске клиента... на сервере создать проблематично:(



A directory object specifies an alias for a directory on the server file system
1 сен 10, 15:58    [9365159]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
mmar
Member

Откуда: -)
Сообщений: 391
mmar,
ссылку забыл
1 сен 10, 16:00    [9365167]     Ответить | Цитировать Сообщить модератору
 Re: работа с изображениями в oracle  [new]
-2-
Member

Откуда:
Сообщений: 15330
Тем не менее, ошибка банальна:
create or replace directory "mydir" as 'C:\test';
1 сен 10, 16:45    [9365566]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить