Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, preciso exibir imagens que estão gravadas em um banco de dados Oracle onde a coluna tem formato LONG RAW,
através do codigo que estou utilizando não estou conseguindo puxar a imagem.
Segue codigo:
$sql = "select FOTO from veiculos_fotos where cod_veiculo_foto = '115'";
$stid = ociparse($Exec->ConnOracle(),$sql);
ociexecute($stid);
while ( $row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_LOBS) ) {
header("Content-type: image/jpg");
print "<img src='".$row['FOTO']."'>";
}
A mensagem que retorna é que a imagem contém erros e não pode ser exibida.
Obrigado desde já..
Att,
>
Eu não sei como está codificada a imagem na tabela, você sabe como ela foi salva ?
Arquivo foi gravado em Hexadecimal.
Att,
print pack( 'H*', $row['FOTO']);
Creio que o contato com a softhouse me passou a informação não muito correta..
a mensagem permaneceu a mesma então tirei o header() e apareceu...
Warning: pack() [function.pack]: Type H: illegal hex digit ÿ in
Acho que errei.
Coloca UnPack() em vez de Pack().
O Header deve continuar.
Além dessa função tem o Hex2Bin($row['Foto']) também...
Se a imagem aparecer pela metade, vai no php.ini
Procure as linhas mssql.textsize e mssql.textlimit e altere o número para 2147483647 em ambos.
Tywin, nada heim...
Alguma outra indicação?
Att,
Fagner
Que erro está dando ?
Essa imagem é JPG mesmo ?
Você tem o código que faz o Upload dela para a tabela ?
>
Que erro está dando ?
Essa imagem é JPG mesmo ?
Você tem o código que faz o Upload dela para a tabela ?
Tywin em primeiro lugar muito obrigado pela atenção que está me dando..
Ai que está o grande problema, a imagem é upada via sistema de automação da empresa desenvolvido em Delphi.
O formato é JPG segue anexo /applications/core/interface/imageproxy/imageproxy.php?img=http://www.npdcometa.com.br/hexa.jpg&key=cf6206ab19a49852e04c55858ed644ddee821e46c4939a32ea64d2f1efbd59f8" alt="hexa.jpg" />.
Se precisar de alguma informação que ajude você a me auxiliar eu tento entrar em contato com a equipe
que desenvolveu o software.
Att,
Dá um echo na variável da imagem sem o header e posta aqui o resultado.
$sql = "select FOTO from veiculos_fotos where cod_veiculo_foto = '115'";
$stid = ociparse($Exec->ConnOracle(),$sql);
ociexecute($stid);
while ( $row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_LOBS) ) {
echo pack('H*',$row['FOTO']);
}
resultado:
Warning: pack() [function.pack]: Type H: illegal hex digit ÿ in /usr/local/apache2/htdocs/Flex/amfphp/services/teste.php on line 11
Warning: pack() [function.pack]: Type H: illegal hex digit Ø in /usr/local/apache2/htdocs/Flex/amfphp/services/teste.php on line 11
...
Att,
Mas sem o Pack também. Só a variável mesmo.
>
Mas sem o Pack também. Só a variável mesmo.
http://www.npdcometa.com.br/teste.php
ÿØÿàJFIF,,ÿÛC ÿÛC ÿÀŽ–"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ?ýS¢Š(¢Š(¢¹ÿxãKðÊ•¸›Í¹ÇðüÏøú~5É]j>'ñ=¬·Rφ4DRï<ϰ„X±ÁÆ;ü¢€;mcÅšNƒ‘{{RŸ(Ïÿ|Žk•“â}Ö§#G è—ØãÍ£êõ"¾\ø£ûq| ø+,¶¶üMñ 4Ö jþÔÇä#ýß0×Êà©ÿ<¯iáH4ßél!;}²¿Š¢šWE(¶~¦\/¯¡yïoìôUœ–UÚ=sÎ?:óoüPøeáÿð•|jÑ„«÷cÔ£’QÿWfÿÇkñsÆÿümñ&s7мY¬ø‰ÜP½’T_÷Tœ(öWÖ_±üÖÃöðLÞ6ñ†»}¥è/pöÖVz^Åžr„‘¤u«œ¨I$FUï°ùm¹õ}ÿímû0é$ù¿î¯dÃoatùüDýk>/Ûcö¸}âÍ^Ø}ôÛ’?Hò¯ËŒ~_…Ÿ|Yá»ñ躜ö)sÀ2ª9UbB@ŽEqô¹™\¨ýšÒ?jÙ³Z˜.ñTÙÌz5å´öà~2Bƒõ¯]ð~µkâ¸ŒÞø›¤ønòí¯£¸Ú=³ãñ¿{û2ê;›;‰mn";’h\£¡õr ÁÈB£Ç> ðÛ×ôs%¸87VÝ1ëÜëô/é¾#‡}ÊÈÀe¢<:ýGõ¯Å‚¿ðQ¿‹ß e‚×QÕ¿á8З ú~¾ÆY6÷ ?úÀqÀÜYG÷kô+àOíðãö¢€OàÛæðŸŽ_6mñÂHp9hÈá×ý¥ä¼£5I܇¬¨®+Â~8škÓ£k±}“VCµY†_韧µv´É (¢€ (¨/¯Óm%¹¹‘a‚%ÜÎÝ Ü\EiÍ4‹H73¹ÀÜ×žßøÃUñÛéþ¡¶S‰up=oçô¬½_WoEwªj—©¡x3NVš{›‰jUFY™¹àWç?ímÿ¾ñJ]xá³xwÂ1†}nÇw¨‡Ë?z(ϯßnûFT¦ì4®}7ñóöÉøeû/I>—bâÄ$$Ik£È³“þ›IÈRðÏë· ×æ×ǯÚÛâWí|çÅãǤ݇§æ(½>@räyËzñÇv‘‹1,Ää’rM%Cw5QH(¢ŠE}%ð'öòøƒû>|'Õ¼áÈtù¢¹§²¿¼Œ¼š{8Ä›;[$²ÝÙÀùÒÂÂëU½†ÎÊÞ[»¹ÜG!w‘@ª9$ú Þñ/Ãx27ˆ<)èqbMKOšÝNzrê(7mô–øðóÅZü’Éwâ}"ýu;ù¤mòÝZܰŽIXžO—?•õûI=«ÏqŠ÷_Ø’Heý¤|1¥^ÙEªéšÊ\é—šeÉ+Èå·Ÿ ð_aÏbí_~xÇþ û¥øÃÁ¾%ñÄUÓ¬|Ci£Ü¦“¡x>Ý,´Í&8ÖG‰Aá9.øÎHƧk‰»‘ÔR²í$b’‘AW´-{Qð¾±g«i×n§gÍowk!ŽHœ†VƒTh ×ÿÙö©³ý¼ Þñ$X|QÑ“®u(‡üµP:08Þ£¡!—‚BýgðÿÅRë6Òéú†SU²;%Và¸núö?ýzþ|~|@Ö¾øãFñg‡®ž¯¥\-ćU‡uJ‘Ü;×î„þ%éß|àÿ‹~lµXí–àäÇ'+$m„ú¨5iÜÊJǽÑQÛÏÕ¼sDÁâ‘C«àŒƒEQ+Ì5»æøƒ¯Kd—ßÃÚwï.®Ka[Nzv8ö×Cñ/_“HÐŵ±?m¾o"0¿x÷ˆüÀükáÏø(÷džø5ð¿NøKáë¯'Ä>#€Üë7œ4vd•)ŸúhÀ¯ûˆÀýêOA¥sçoÛÇöÓ—ãF±'€ürlþir÷@JÿjʇýcÓ Gȧ¯Þ<à/Ç4QY›%¢Š(QE£áÏê~×luúm7U±”MmwnÛd‰ÇFSØ×ØŸ?੼/wo§|A·²ñ÷†ä";Ÿ>Ý"¼XÏk(üvu9é¸u¯Š€É®×Áº…áÿŠZf•ñ×PCŠí!ÕbÓ¦Xî"SÁ ²°Êç%q“‚ ¤ÏÜ/ þÏŸ|[}ᯉ~ðV쫦êzt&ÔÊ$+U$‚ ܽ:óöøa{ñŠ×áz©Öý½>xâ$k¢ÚÜè~ø¥¡Øê®¢éÑ’š–•išR0#”¤Nȹ=r +ùi_|þÒ£P´ÿ‚ƒ|IÖ¦gþÏÑ|1uxòuXá:'”«ÿšUO¬•ð1äÔ3XìQE"‚¿Hÿà”_[Ä>ñïÂ{é÷(k:b9û§"9€ö ä6«õù¹_C~À>:~Ö>Ÿ~Û}Jé´™—8.Æ ÿÛFCø kq5t~ÓüÕûÃÚ\ùÖrH=qÔ<~Vw„]tOˆ#Óˆ_ô€AÈ#ÿCý(Ý2ëÿÀ²iù‡wÝÜsù°ÿ¾kðÏö—ø¯?ÆÏŽ~/ñt“4¶··Î–A¿‚ÕÈW¾E\û’{×ìoÄIá|I캵ÑïžÞOGLWõÛ_„„ä“Q#HV¯…¼1©xÓÄ6&‘lnõÙDPÄ2{’z$“À“Ò¤ÐËDi*‚ÌN$×êÏìµÿÎð«ðsBÖ~&èº×еHMÔÖy-°´F$Æ›© ³iÜ‚Hí^EÿÞý–¼ccñÃß|Gá0|öRØß݈؅o-O”Çz0!È%GLƒÍ~¨ø‡ÄšO„t‹S[Ôí4}2ÝwKy}:ÃcÔ³RFr}ñw?à’ õÈÝü?¬øƒÃWùWÏK¨Õ]wûìWçWícû8ŸÙ{â„^oÇâS%„wâê;cnP;º„d,Üá3Áè¿|#ûkü)ø‰ñ ÓÁ~ÖnüSÜ1ñ,ÓæhbQ÷åeU½KGLd+?ö¡ð‡ÁŸø{\ø§ãýѵ8âŠÔÚÎÛ¶p@Š("¸W..
Então... não dá pra saber que tipo de codificação foi usada, não parece ser HexaDecimal.
É um tipo de Hash... tinha que perguntar pra eles.
Olha só, não sei como está seu atual código. Vou me basear no que eu li.
Até onde eu entendo de criação de imagens em tempo de execução, isso aqui está errado:
header("Content-type: image/jpg");
print "<img src='".$row['FOTO']."'>";
O fato é que você deve exibir a imagem em um arquivo, por exemplo "imagem.php", e ai sim esse arquivo deverá ser chamado no SRC da tag img:
mais ou menos assim:
image.php:
header( 'Content-type: image/jpeg' );
print pack('H*', $image);
E então o HTML:
<img src="image.php" />
O código mostrado não parece ser hexadecial, está mais para um arquivo binário compilado.
Lembro que com o MS SQL, ao se salvar uma imagem no servidor, ele utilizava o código binário e, em cima do código binário, convertia para a base 64.
Todos os erros que aparecem é por não ser um código hexadecimal.
Encontrei essa thread do Stack Overflow, que fala sobre o formato Long RAW que não deve mais ser utilizado. Pois possui muitos problemas e só foi mantido por causa da compatibilidade com sistemas antigos.
No lugar de Long Raw deve utilizar BLOB.
>
Então... não dá pra saber que tipo de codificação foi usada, não parece ser HexaDecimal.
É um tipo de Hash... tinha que perguntar pra eles.
Obrigado, Gabriel e Tywin estou tentando falar com o desenvolvedor da aplicação, o
cara é mais dificil de se falar que a Dilma!
Ficando pronto eu posto aqui todo o código.
Abraços.
Att,
>
Obrigado, Gabriel e Tywin estou tentando falar com o desenvolvedor da aplicação, o
cara é mais dificil de se falar que a Dilma!
Ficando pronto eu posto aqui todo o código.
Abraços.
Att,
Mudei de tabela para teste..
o hexa apareceu nessa nova tabela.
codigo ficou da seguitne forma, seguindo conselho do Gabriel:
imagem.php
$Exec = new Classes();
$sql = "SELECT IMAGEM FROM RM.GIMAGEM WHERE ID = 31";
$stid = ociparse($Exec->ConnOracle(),$sql);
ociexecute($stid);
//$row = oci_fetch_object($stid, OCI_ASSOC+OCI_RETURN_LOBS);
ocifetch($stid);
$imagem = unpack("H*",OCIResult($stid,'IMAGEM'));
//resultado de print $imagem sem header;
//ffd8ffe000104a46494600010101004800480000ffdb00430002020202020202020202... ..000202020202020202020
header('Content-type: image/jpeg');
print $imagem[1];
teste.php
<html>
<body>
<img src="imagem.php" />
</body>
</html>
Alguma luz agora? a imagem ainda nao imprimi porém não da mais erro, http://www.npdcometa.com.br/teste.php
Em vez de UnPack() tenta Pack().
Se não funcionar, use Hex2Bin($Var).
PS: Nunca desenvolvi pra Oracle... estou seguindo a linha de raciocínio do SQL Server que já estou calejado! Hehe.
>
Em vez de UnPack() tenta Pack().
Se não funcionar, use Hex2Bin($Var).
PS: Nunca desenvolvi pra Oracle... estou seguindo a linha de raciocínio do SQL Server que já estou calejado! Hehe.
Bom dia...
Elaia... a bendita da imagem não carrega nem na bala...
Estou desanimando com isso já, mas infelizmente não posso seguir outro caminho de exibir essas imagens,
diretoria quer pegar direto do banco... valeu ae pela força.. vou continuar pesquisando.
Att,
Eu queria fazer um teste aqui... mas o campo hexadecimal que você postou aí acima está incompleto. Pode postar ele inteiro se possível ?
Salve...
Seguinte.. cansado de tentar trabalhar com esse campo LONG RAW criei um campo BLOB e fui fazer um de-para, eis que
surge a mensagem que o campo blob nao aceita binary (algo assim) looogo descobri que o programador me passou informação incorreta...
então meu codigo entao foi resolvido, segue codigo final:
e funcionando.
$sql = "SELECT * FROM VEICULOS_FOTOS WHERE cod_veiculo_foto = ".$_GET['idv'];
$stid = ociparse($Exec->ConnOracle(),$sql);
ociexecute($stid);
$row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS);
if (!$row) {
header('Status: 404 Not Found');
} else {
$img = $row['FOTO'];
header("Content-type: image/jpg");
print $img;
}
Obrigado pela atenção Twyin e Gabriel..
Abraços.
Att,
Eu não sei como está codificada a imagem na tabela, você sabe como ela foi salva ?