esize de image - escrevendo nela com DrawString (redimensionando imagem com qualidade e escrevendo nela)

06/11/2013

0

Boa tarde a todos,

Estou fazendo um upload e toda vez que fizer o upload eu vou redimensiona-la com qualidade e possívelmente ou não etiqueta-la (escrever no rodapé dela)

Cada item desse eu consegui fazer
classe resize
classe de etiquetar

porém quando eu ia etiquetar a imagem já feita resize ela dava o erro de GDI+ pois ela já existia. tinha que criar uma nova.
E como o sistema vai ser muito utilizado, milhares de fotos, não da para eu mover para um _temp_folder depois etiqueta-la e depois voltar a mover.

Então pensei em fazer na mesma função.

Mas não consegui.

public class Manipular_image
{
private string _path_temp;
private string _path_save;
private string _foto;
private string _linha;
private bool _etiquetar;

public string Path_Temp
{
get { return _path_temp; }
set { _path_temp = value; }
}

public string Path_Save
{
get { return _path_save; }
set { _path_save = value; }
}

public string NomeFoto
{
get { return _foto; }
set { _foto = value; }
}

public string Linha1
{
get { return _linha; }
set { _linha = value; }
}

public bool Etiquetar
{
get { return _etiquetar; }
set { _etiquetar = value; }
}




public void resize_Pro(int width)
{
string pathimg = _path_temp + _foto;
using (Image imageOriginal = Image.FromFile(pathimg)) //abre a imagem
{
int altura = (imageOriginal.Height * width) / imageOriginal.Width; // calcula largura em proporção
var thumbnailImg = new Bitmap(width, altura);
using (var thumbGraph = Graphics.FromImage(thumbnailImg))
{
if (_etiquetar == true)
{
// retangulo de fundo
Brush brush = new SolidBrush(Color.FromArgb(120, 255, 255, 255));
thumbGraph.FillRectangle(brush, 0, imageOriginal.Height - 20, imageOriginal.Width, 20);

// texto
brush = new SolidBrush(Color.White);
thumbGraph.DrawString(_linha, new Font("verdana", 12, FontStyle.Bold), brush, new Point(6, imageOriginal.Height - 19));

// sombra do texto
brush = new SolidBrush(Color.Black);
thumbGraph.DrawString(_linha, new Font("verdana", 12, FontStyle.Bold), brush, new Point(5, imageOriginal.Height - 20));
}

thumbGraph.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
thumbGraph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
thumbGraph.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
var imageRectangle = new Rectangle(0, 0, width, altura);
thumbGraph.DrawImage(imageOriginal, imageRectangle);
}
thumbnailImg.Save(_path_save + _foto, System.Drawing.Imaging.ImageFormat.Jpeg); //salva sempre em .jpg
imageOriginal.Dispose();
}
}
Com a função acima esta redimensionando com qualidade mas não esta etiquetando.

a função que funciona para etiquetar é

public void Etiqueta(string Linha1)
{
string pathimg = _path_temp + _foto; // ela já utiliza a imagem tratada

using (Image image = Image.FromFile(pathimg))
{
using (Graphics graphics = Graphics.FromImage(image))
{
// retangulo de fundo
Brush brush = new SolidBrush(Color.FromArgb(120, 255, 255, 255));
graphics.FillRectangle(brush, 0, image.Height - 20, image.Width, 20);

// texto
brush = new SolidBrush(Color.White);
graphics.DrawString(Linha1, new Font("verdana", 12, FontStyle.Bold), brush, new Point(6, image.Height - 19));

// sombra do texto
brush = new SolidBrush(Color.Black);
graphics.DrawString(Linha1, new Font("verdana", 12, FontStyle.Bold), brush, new Point(5, image.Height - 20));
}
// salva nova imagem
image.Save(_path_save + "_etiquetada" + _foto); // aqui tem que ter um nome diferente senão da erro
}
}
porém só funciona se o resultado final for uma nova imagem! e não a foto já existente

estaria chamando assim:
Manipular_image img1 = new Manipular_image();
img1.Path_Temp = @"D:\mydocuments\C#\FileUpload\FileUpload\uploads\";
img1.Path_Save = @"D:\mydocuments\C#\FileUpload\FileUpload\foto\";
img1.Linha1 = "Frase";
img1.Etiquetar = true;
img1.NomeFoto = "original.jpg";

img1.resize_Pro(680);
Leonardo Dorathoto

Leonardo Dorathoto

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar