Buscando o preview de um arquivo EPS em C# com ASP.NET 

Escrito por Daniel Nogueira • Jun 17th, 2008 • Categoria: C#

Dentro de um arquivo EPS (Encapsulated Postscript) podemos encontrar um preview da imagem em TIFF. O TIFF encontrado no EPS é bastante útil para não necessitamos de programas como o PhotoShop, CorelDraw, Illustrator ou outros para serem visualizados, como por exemplo gerar um thumbnail da imagem.

Neste artigo vou mostrar como buscar este TIFF para podermos trabalhar com ele.

Exemplo

Este exemplo consiste em efetuar o upload de um arquivo EPS, e mostrar o preview do arquivo EPS na página.

1 - Crie o arquivo Default.aspx que vai conter a interface do exemplo;

2 - Insira no arquivo um component FileUpload e o renomeie para FileUploadEps;

3 - E insira um componente Button e o renomeie para ButtonUploadEps;

Arquivo Default.aspx

<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml” >
<head runat=”server”>
<title>Preview de Arquivos EPS</title>
</head>
<body>
<form id=”form1″ runat=”server”>
<div>
<asp:FileUpload ID=”FileUploadEps” runat=”server” Style=”position: relative” />
<asp:Button ID=”ButtonUploadEps” runat=”server” OnClick=”ButtonUploadEps_Click” Style=”position:relative” Text=”Upload EPS” />
</div>
</form>
</body>
</html>

4 - Crie o arquivo Default.aspx.cs que vai conter o código em C#;

5 - Use os seguintes namespace:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.IO;
using System.Drawing;
using System.Drawing.Imaging;

6 - Crie o evento de click do botão “ButtonUploadEps” e insira nele o seguinte código:

FileStream fileStreamEps = null;
string strCaminhoEpsUpload = “”;

//* Verifica se o usuário selecionou algum arquivo
if (FileUploadEps.PostedFile.FileName != “”)
{

//* Monta o caminho da onde o arquivo vai ser salvo
strCaminhoEpsUpload = MapPath(”.”) + “\\” + Path.GetFileName(FileUploadEps.PostedFile.FileName);

//* Executa o upload do arquivo
FileUploadEps.PostedFile.SaveAs(strCaminhoEpsUpload);

//* Abre o arquivo e lê o header
fileStreamEps = File.Open(strCaminhoEpsUpload, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

byte[] buf = new byte[32];

//* Passa para o buffer o header do arquivo
fileStreamEps.Read(buf, 0, 32);

//* Converte para uint
uint idArquivo = obtemU(buf, 0);

//* Verifica se o arquivo de entrada é um EPS
if (idArquivo != 0xc6d3d0c5)
{

return;

}

//* obtem o uint
uint TIFOff = obtemU(buf, 20);

//* Verifica se foi encontrado no EPS a identificação de preview
if (TIFOff == 0)
{

return;

}

//* Não posicionou no TifOffset
if (fileStreamEps.Seek(TIFOff, SeekOrigin.Begin) != TIFOff)
{
return;
}

//* obtem o uint
uint TIFSize = obtemU(buf, 24);

//* Redimensiona o buffer
byte[] msBuf = new Byte[TIFSize];

//* Passa o arquivo para a memória
MemoryStream memoryStreamEps = new MemoryStream(msBuf);
fileStreamEps.Read(msBuf, 0, (int)TIFSize);

//* Cria um novo bitmap apartir do conteudo da memoria
Bitmap bitMapEps = new Bitmap(memoryStreamEps);

//* Mostra a imagem na tela
bitMapEps.Save(Response.OutputStream, ImageFormat.Jpeg);
bitMapEps.Dispose();
}

7 - Crie uma função para obter o uint:

private static uint obtemU(byte[] buf, int pos)
{
return (uint)(buf[pos] + 0×100 * buf[pos + 1] + 0×10000 * buf[pos + 2] + 0×1000000 * buf[pos + 3]);
}

Vale lembrar que não são todos os EPS que contem um arquivo de preview. Na hora de salvar a imagem em EPS o usuário tem a escolha, se deseja salvar o preview, e em qual qualidade será gerado o preview.

Download do Exemplo

Clique aqui para efetuar o download do projeto de exemplo. O projeto foi criado no Visual Studio 2005.

Confira ofertas de: DVD, filmes, celular, notebook, livros, jogos, Wii, PS3, MP4

Deixe um comentário