Olá pessoal, eu procurei no fórum porém não encontrei algo bem claro.
Alguém sabe me dizer o que devo fazer para converter uma imagem em xml e vice-versa?
explica melhor essa história cara, parece q vc nao esta fazendo isso certo, seja lá q vc esteja fazendo
se tratata de um jpg ou png? pois nao faz mto sentido, se for imagens vetoriais como svg fica mais plausivel
diga o motivo de vc precisar isso, t+
como assim?
você quer converter uma imagem com o texto de um xml no texto em si e depois com o texto gerar uma imagem com ele?
O negócio é o seguinte:
Eu tenho no banco de dados uma tabela chamada ICATB_IMAGEM com a seguinte estrutura:
create table ICATB_IMAGEM
(
IMG_ID NUMBER(19),
IMG_NM_TECNICORESPONSAVEL VARCHAR2(100),
IMG_DT_ELABORACAO TIMESTAMP(3),
IMG_TPI_ID NUMBER(19),
IMG_EST_ID NUMBER(19),
IMG_IM BLOB
);
No banco eu tenho uma function chamada EXPORTAR_XML, que retorna um xml com os dados do banco:
<ICATB_IMAGEM>
<IMG_ID>11</IMG_ID>
<IMG_NM_TECNICORESPONSAVEL>EU</IMG_NM_TECNICORESPONSAVEL>
<IMG_DT_ELABORACAO>01/01/2011 00:00:00</IMG_DT_ELABORACAO>
<IMG_TPI_ID>3</IMG_TPI_ID>
<IMG_EST_ID>21</IMG_EST_ID>
<IMG_IM>FFD8FFE000104A46494600010201006000600000FFED0D1850686F746F73686F7020332E30003842494D03ED0A52</IMG_IM>
</ICATB_IMAGEM>
Na verdade, dentro da tag <IMG_IM> eu tenho um número gigantesco (impossível postá-lo).
Agora eu preciso pegar este xml para gerar um comando insert, até aí tudo bem, com exceção do campo IMG_IM.
Como que eu faço para transfomar os dados dessa tag em imagem novamente?
Obrigado.
durante a exportação vc pode inseri-lo como blob mesmo, somente na hora de ler os dados em uma aplicação vc transforma o blob em imagem
O problema é que eu estou usando uma função criada pelos caras do banco para gerar o xml.
Será que há uma maneira de converter este hexadecimal em uma imagem?
Função criada para a geração do xml no PLSQL.
create or replace function EXPORTA_XML
(P_TAB in VARCHAR2,
P_WHERE in VARCHAR2)
return clob is
qryCtx DBMS_XMLGEN.ctxHandle;
Result clob;
begin
execute immediate 'ALTER SESSION SET nls_timestamp_format = ''' || 'DD/MM/YYYY HH24:MI:SS' || '''';
--------------------------------------------------------------
qryCtx := DBMS_XMLGEN.newContext( 'SELECT * FROM '
|| UPPER(P_TAB) || ' ' || UPPER(P_WHERE));
--------------------------------------------------------------
--SETA O TRATAMENTO DE CAMPO NULL
DBMS_XMLGEN.setNullHandling(qryCtx, 1);
--------------------------------------------------------------
-- Set the row header to be table
DBMS_XMLGEN.setRowTag(qryCtx, UPPER(P_TAB));
-- Get the result
result := DBMS_XMLGEN.getXML(qryCtx);
--Close context
DBMS_XMLGEN.closeContext(qryCtx);
--Return
return(Result);
end EXPORTA_XML;
talves você possa pesquisar como converter isso dai num byte[] (array mesmo).
a unica vez que eu ja trabalhei com blob (lob para ser exato). eu usei o hibernate, com jdbc eu não sei direito se tem um setter para array de bytes ou algo do tipo (do qual você inseriria imagens, se tiver, você pode usar isso para inserir a imagem no banco e o respectivo getter para obter). Com o hibernate anotando o byte com @Lob funcionou certinho…
/**
* Método utilizado para converter o valor da tag referente a imagem("IMG_IM")
* @param valorConversao
* @return
*/
private byte[] converteStringHexToByte(String valorConversao){
char aux[] = valorConversao.toCharArray();
int length = aux.length / 2;
byte[] raw = new byte[length];
for (int i = 0; i < length; i++) {
int high = Character.digit(aux[i * 2], 16);
int low = Character.digit(aux[i * 2 + 1], 16);
int value = (high << 4) | low;
if (value > 127)
value -= 256;
raw[i] = (byte) value;
}
return raw;
}