Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

0cool

Base64 Encoding for Images

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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") & """ />")
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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") & """ />")
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.