Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, estava visitando um site de um camarada, e ele postou lá um code em php interessante, procurei na net e não achei nada para encode base64 de imagens no asp, por isso decidi fazer, o resultado final eu gostei pois achei que o code ficou bem limpo, pensava que teria que fazer muita firula até conseguir chegar ao resultado, mais no final ficou muito bacana.
Vantagens:
Reduz o número de requisições http no servidor, com isso reduz o consumo
Carrega mais rápido do que o método padrão
O Google já utiliza este método a anos, certamente para diminuir e aumentar a performance no server
Desvantagens:
O IEca não da suporte a utilizar este método.
Mais muitos dizem que este método será bastante utilizado no futuro, é aguardar pra ver :D
Versão PHP...
<? Php
$ Img_src = "imagem sample.png /" ;
$ Imgbinary = fread ( fopen ($ img_src, "r"), filesize ($ img_src));
$ Img_str = base64_encode ($ imgbinary);
echo " <img src = "data: image / jpg; base64, ". $ img_str . "/> ';
?>
http://www.9lessons.info/2010/11/base64-encoding-for-images.html
E tomando como exemplo esta versão do PHP acima eu fiz essa abaixo em ASP.
<%
Function Imgbinary(path)
dim str : set str = Server.createObject("ADODB.Stream")
str.type = 1
str.open()
str.loadFromFile(Server.mapPath(path))
bin = str.read()
dim open : set open = Server.createObject("MSXML2.DOMDocument.6.0")
dim src : set src = open.createElement("data")
src.dataType = "bin.base64"
src.nodeTypedValue = bin
Imgbinary = "data:image/jpg;base64," & src.text
str.close()
set str = nothing
set src = nothing
set open = nothing
End Function
Response.Write("<img src=""" & Imgbinary("teste.jpg") & """ />")
%>
Valew.
Valew Vinicios! :joia:
Fiz um upgrade, agora além de aceitar arquivos localmente como já estava aceitando... eu coloquei para aceitar arquivos de outro servidor.
As chamativas são:
para imagens em outro servidor
Imgbinary("http://url-do-site/nome-imagem.jpg","s")
e localmente
Imgbinary("teste.jpg","l")
O code completo e atualizado é esse...
<%
Function Imgbinary(path,local)
dim str : set str = Server.createObject("ADODB.Stream")
if local = "l" then
str.type = 1
str.open()
str.loadFromFile(Server.mapPath(path))
bin = str.read()
else
dim srv : set srv = Server.CreateObject("Msxml2.ServerXMLHTTP")
srv.Open "GET", path, false
srv.Send()
str.Type = 1
str.Open
bin = srv.responseBody
set srv = nothing
end if
dim open : set open = Server.createObject("MSXML2.DOMDocument.6.0")
dim src : set src = open.createElement("data")
src.dataType = "bin.base64"
src.nodeTypedValue = bin
Imgbinary = "data:image/jpg;base64," & src.text
str.close()
set str = nothing
set src = nothing
set open = nothing
End Function
Response.Write("<img src=""" & Imgbinary("teste.jpg","l") & """ />")
Response.Write("<img src=""" & Imgbinary("http://i56.tinypic.com/4gkojd_th.gif","s") & """ />")
%>Galera, versão 1.3 deixei mais dinâmico e inteligente para saber se a imagem é via web ou local.
<%
Function Imgbinary(path)
dim str : set str = Server.createObject("ADODB.Stream")
if instr(path,"http://") then
dim srv : set srv = Server.CreateObject("Msxml2.ServerXMLHTTP")
srv.Open "GET", path, false
srv.Send()
str.Type = 1
str.Open
bin = srv.responseBody
set srv = nothing
else
str.type = 1
str.open()
str.loadFromFile(Server.mapPath(path))
bin = str.read()
end if
dim open : set open = Server.createObject("MSXML2.DOMDocument.6.0")
dim src : set src = open.createElement("data")
src.dataType = "bin.base64"
src.nodeTypedValue = bin
Imgbinary = "data:image/jpg;base64," & src.text
str.close()
set str = nothing
set src = nothing
set open = nothing
End Function
Response.Write("<img src=""" & Imgbinary("teste.jpg") & """ />")
Response.Write("<img src=""" & Imgbinary("http://i56.tinypic.com/4gkojd_th.gif") & """ />")
%>Fiz uma pequena melhoria no código para identificar se é uma URL ou imagem local e se é IE ou não, já que no IE da erro.
Public Function imgBinary(path)
If (inStr(Request.ServerVariables("HTTP_USER_AGENT"),"MSIE") = 0) Then
Dim str : Set str = Server.CreateObject("ADODB.Stream")
Dim bin
If (inStr(path,"://") = 0) Then
str.type = 1
str.open()
str.loadFromFile(Server.MapPath(path))
bin = str.read()
Else
dim srv : set srv = Server.CreateObject("Msxml2.ServerXMLHTTP")
srv.Open "GET", path, false
srv.Send()
str.Type = 1
str.Open
bin = srv.responseBody
Set srv = Nothing
End If
Dim open : Set open = Server.CreateObject("MSXML2.DOMDocument.6.0")
Dim src : Set src = open.CreateElement("data")
src.dataType = "bin.base64"
src.nodeTypedValue = bin
path = "data:image/jpg;base64," & src.text
str.Close()
Set str = Nothing
Set src = Nothing
Set open = Nothing
End If
imgBinary = path
End Function
Ficou boa a melhoria hargon, o ie é noiadão rs.
Show.
Boa Contribuição !
Com certeza será bem util