Вы находитесь на странице: 1из 8

avanttic blog (100% Oracle)

avanttic, el partner 100% Oracle

Inicio
sobre nosotros
posts destacados
publicaciones
eventos
trabaja en avanttic

Type text to search here...


Inicio > SQL > Procesamiento de imagenes en Oracle Database 11g

Procesamiento de imagenes en Oracle Database 11g


diciembre 19, 2013 Cristina Abba Deja un comentario Go to comments

Existen varias opciones para almacenar imágenes en BBDD Oracle. La manera más común es utilizar una
columna de tipo BLOB y cargar una imagen como contenido binario.

A partir de la versión 11g, Oracle ha introducido Oracle Multimedia (anteriormente conocido como Oracle
InterMedia), una extensión que permite guardar imágenes, audio, vídeo y otra información multimedial.

Oracle Multimedia introduce los objetos de tipo ORDAudio, ORDDoc, ORDImage, ORDVideo, and
SI_StillImage y métodos para:

Extraer metadatos y atributos de datos multimediales


Incrustar metadatos generados por otras aplicaciones en ficheros imagen
Incorporar datos multimediales a partir de Oracle Multimedia, web servers, file systems, y otros servidores
Ejecutar operaciones y aplicar transformaciones a imágenes

En otras palabras, Oracle Multimedia permite manipular imágenes con una simple instrucción SQL.

En este post, el enfoque será en las operaciones que se pueden realizar sobre imágenes.

Empezamos creando una tabla donde guardaremos una imagen en formato TIFF.

CREATE TABLE AVT_IMG


(
ID NUMBER,
TIFF_IMG ORDSYS.ORDImage
);

Además se crea un directorio que apunte a la ubicación de las imágenes.

CREATE OR REPLACE DIRECTORY avt_img_dir as 'C:\Imagenes_Blog';


Construimos un objeto ORDImage a partir de la imagen y lo insertamos en la tabla que acabamos de crear.

-- Inicialización del objeto ORDImage


INSERT INTO AVT_IMG VALUES(1,ORDImage.init());
COMMIT;
-- Carga de la imagen en el campo ORDImage
DECLARE
obj ORDSYS.ORDImage;
ctx RAW(64) := NULL;
BEGIN
-- El metodo import() carga las propiedades multimediales de la imagen
select TIFF_IMG into obj
from AVT_IMG
where ID = 1 for update;
obj.setSource('FILE', 'AVT_IMG_DIR', 'avanttic_logo.tif');
obj.import(ctx);
update AVT_IMG set TIFF_IMG = obj where id = 1;
commit;
END;
/

Utilizando los métodos del objeto ORDSYS.ORDImage se pueden visualizar las propiedades de la imagen.

DECLARE
image ORDSYS.ORDImage;
compression_format VARCHAR2(4000);
img_height NUMBER;
img_width NUMBER;
content_size NUMBER;
metav XMLSequenceType;
properties_match BOOLEAN;
BEGIN
-- Cargamos la imagen en una variable
SELECT TIFF_IMG INTO image FROM AVT_IMG
WHERE ID=1;
-- Averiguamos que sea posible leer las propiedades de la imagen
properties_match := image.checkProperties();
IF properties_match THEN
DBMS_OUTPUT.PUT_LINE('Check Properties succeeded');
ELSE
DBMS_OUTPUT.PUT_LINE('Check Properties failed');
END IF;
-- Extraemos las propiedades de la imagen
compression_format := image.getCompressionFormat();
img_height := image.getHeight();
img_width := image.getWidth();
content_size := image.getContentLength();
DBMS_OUTPUT.PUT_LINE('Formato de compresión: ' || compression_format);
DBMS_OUTPUT.PUT_LINE('Alto: ' || img_height);
DBMS_OUTPUT.PUT_LINE('Ancho: ' || img_width);
DBMS_OUTPUT.PUT_LINE('Tamaño: ' || content_size);
COMMIT;
END;
/

El resultado de este bloque de còdigo es:

y coincide con las propiedades de la imagen que estamos utilizando como ejemplo.

Añadimos a la tabla las siguientes columnas:

ALTER TABLE AVT_IMG ADD (JPEG_IMG ORDSYS.ORDImage, TIFF_BLOB BLOB, JPEG_BLOB BLOB);

para poder guardar el contenido binario (sin metadatos) de la imagen y su copia en formato JPEG.

Para extraer el contenido BLOB de la imagen (sin metadatos), existe el método getContent().

UPDATE AVT_IMG
SET TIFF_BLOB = ordsys.ordimage.getContent(TIFF_IMG);
COMMIT;
Para realizar una conversión de formato, por ejemplo de TIFF a JPEG, se puede utilizar el método processCopy().

DECLARE
imgTiff blob;
imgJpeg blob;
BEGIN
UPDATE AVT_IMG SET JPEG_BLOB = empty_blob()
RETURNING TIFF_BLOB, JPEG_BLOB
INTO imgTiff, imgJpeg;
-- El metodo recibe como parametros:
-- * imagen origen
-- * cadena que especifica el tipo de transformación a realizar
-- * imagen destino
ordsys.ordimage.processCopy(imgTiff, 'fileformat=jpeg', imgJpeg);
UPDATE AVT_IMG SET JPEG_BLOB = imgJpeg;
COMMIT;
END;
/

Se pueden realizar conversiones entre los siguientes formatos: BMPF, CALS, GIFF, JFIF, PBMF, PGMF, PICT,
PNGF, PNMF, PPMF, RASF, RPIX, TGAF, TIFF, WBMP.
Para crear el objeto JPEG_IMG a partir del BLOB en JPEG podemos utilizar la instrucción:

UPDATE AVT_IMG
SET JPEG_IMG =
ordsys.ordimage(ordsys.ordsource(JPEG_BLOB, null, null, null, sysdate, 1)
,null, null, null, null, null, null, null );

Los métodos process() (que sobrescribe la imagen origen con el resultado de la transformación) y processCopy()
permiten realizar transformaciones más complejas como por ejemplo, ajustar el contraste, escalar o rotar la imagen.
El ejemplo siguiente realiza una rotación de 90 grados de la imagen en JPEG.

DECLARE
imgTiff blob;
imgJpeg blob;
BEGIN
UPDATE AVT_IMG set JPEG_BLOB=JPEG_BLOB
RETURNING JPEG_BLOB
INTO imgJpeg;
ordsys.ordimage.process(imgJpeg, 'rotate=90');
UPDATE AVT_IMG SET JPEG_BLOB = imgJpeg;
COMMIT;
END;

Con estos ejemplos se ha querido dar una breve demostración de que Oracle Multimedia ofrece una solución
versátil para el tratamiento de datos multimediales.
Para más información, consultar la documentación oficial en http://www.oracle.com/pls/db112/portal.portal_db?
selected=7&frame=#oracle_multimedia.

S hare this:

 LinkedIn 1  Twitter

Me gusta
A un bloguero le gusta esto.

Relacionado

Razones para utilizar Big Data SQL Posts más visitados de avanttic blog Oracle Warehouse Builder (OWB) vs
v 3.1 durante el 2014 Oracle Data Integrator (ODI)
En "Business Analytics" En "avanttic" En "Business Analytics"

Categorías:SQL Etiquetas: BLOB, Compression, Conversion formato, Oracle Multimedia, ORDImage, Rotar
imagenes
Comentarios (0) Trackbacks (0) Deja un comentario Trackback

1. Aún no hay comentarios.

1. No trackbacks yet.

Responder

Introduce aquí tu comentario...

avanttic os desea Felices Fiestas y un próspero año 2014 Crónica del Taller: Seguridad y alta disponibilidad de la
información en las administraciones locales
RSS feed

Follow us on:

Categorías

Actualidad (95)
ADF / Java (64)
avanttic (95)
Business Analytics (46)
Cloud (29)
Database (27)
Eventos (49)
Forms & Reports (48)
GoldenGate (6)
Hardware (9)
Herramientas (10)
JavaScript (6)
JDeveloper (4)
MAF / ADF Mobile (16)
Metodología (5)
RR. HH. (13)
Seguridad (17)
Sistemas (30)
SOA / BPM / WebCenter (29)
SQL (7)
Virtual Machine (7)
WebLogic (12)

ADF / Java ADF 11g ADF 12c ADF Faces ADF mobile ADF tips Administración Alta
Disponibilidad BestPractices BICS Big Data BI Publisher BP M Business Analytics Business
Intelligence Casos de éxito clientes Cloud Cuore Customer Experience Database Digital Transformation
disaster recovery Endeca Esp ecialización Exadata Forms & Reports Fusion Middleware

GoldenGate Herramientas IaaS Integración IoT JavaScript JDeveloper Licenciamiento MAF MCS
Migración Mobile Modernización movilidad M y SQL Noticias OBI OBI 11g ODI ODI 12C OOW OPN
ORACLE Oracleando Oracle Application Server Oracle Database Oracle Database 11g
Oracle Cloud

Oracle Database 12c Oracle Data Integrator Oracle Enterp rise M anager Oracle Linux Oracle Mobile Cloud
Service Oracle Mobile P latform Oracle Service Bus Oracle VM PaaS P artner P CS pl/sql productividad
Reducción de costes Seguridad SM ACT SOA / BPM / WebCenter Webcenter WebLogic Web Service

Subscripcion via email

Para suscribirte a nuestro blog y recibir las actualizaciones en tiempo real via email.

Introduce tu dirección de correo electrónico

Subscríbete!

Posts más vistos

Consumir o exponer servicios REST con Oracle Service Bus 11g


¡Arrancamos grupo y meetup para los amantes de Oracle Database!
Diferentes versiones de Oracle Database
Operaciones de "FLASHBACK" en Oracle Database
Oracle Data Modeler: Herramienta gratuita para el modelado de datos
Oracle Database Standard Edition 2 (SE2) - Licenciamiento y conversión desde SE/SE1
Evitar errores de "tabla mutante" en Oracle Database
¿Qué versión elegir de Oracle Database, Enterprise o Standard?
Creación de servicios en bases de datos Oracle
Licenciamiento productos Oracle Enterprise Edition sobre CPUs multicore
Autores

Alberto Cubillo
Ana Ruiz
Ana Díaz
Angel Freire
Antonio José Molina
avanttic
Diana Pujagut
Guillermo J. Solla
Helena Lecina
Israel Gatell
Javier Gea
Javier Llorente
Jesús García
Javier Villafranca
Joan Massegú
Jordi Piñol
Jordi Sansó
Jose Legido
Mikel Garzo
Leonardo Torres
Miriam Marín
Monica Esteve
Raúl Tarifa
Rebeca Guillén
Rafael Planella
Rafael Prada
Rubén Rodríguez
Sonsoles Moreno
Xavier Ribas

Arriba
Blog de WordPress.com.

Вам также может понравиться