Fórum Trabalhando com imagens #27197
11/03/2010
0
eu estou usando este código
protected bool ResizeImagem(string nomeArquivo, string Caminho)
{
bool resultado = false;
int Largura = 180;
//Grande
try
{
System.Drawing.Image objImage = System.Drawing.Image.FromFile(Caminho);
int Altura = (objImage.Height / (objImage.Width / Largura));
System.Drawing.Image.GetThumbnailImageAbort dummyCallBack = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
System.Drawing.Image thumbNailImg = objImage.GetThumbnailImage(Largura, Altura, dummyCallBack, IntPtr.Zero); //dados dentro dos parenteses: largura, altura...
thumbNailImg.Save(Server.MapPath("empreendimento/imagesApartamentos/grd/" + nomeArquivo)); //onde está “thumbnail.jpg” mude para o nome desejad para a thumbnail
//fechando conexoes
thumbNailImg.Dispose();
objImage.Dispose();
resultado = true;
}
catch (Exception)
{
resultado = false;
}
}
esta funcionando normalmente,
ele defina uma largura da imagem atual e tras a altura necessária e cria um novo objeto,
mas preciso da seguinte situação
Eu posso fazer o download de variso tipos de imagens e tamanhos...retrato, paisagem com altura e largunras diferentes.
pensando desta forma preciso
1. identificar a altura e largura da imagem
2. definir onde esta o centro da imagem
3. a partir deste ponto recortar ( ou guardar, criando um novo objeto ) na forma ( altura e largura) que eu preciso, ou seja um quadrado.
um bom exemplo é quando vamos fazer um cadastro, como Wordpress, uol, MSN e fazemos o upload da imagem,
derepente aparece uma página com um quadrado para que possamos definir (ou recortar ) emcima da imagem enviada.
só quero que isto seja feito automaticamente.
Espero ter sido claro.
Fernando Reis
Curtir tópico
+ 0Posts
15/03/2010
Fernando Reis
Gostei + 0
15/03/2010
Fabio Mans
O método CalculateDimensions faz o exatemente o que você precisa.
private static byte[] ResizeImageFile(byte[] imageFile, int targetSize)
{
using (System.Drawing.Image oldImage = System.Drawing.Image.FromStream(new MemoryStream(imageFile)))
{
Size newSize = CalculateDimensions(oldImage.Size, targetSize);
using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb))
{
using (Graphics canvas = Graphics.FromImage(newImage))
{
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize));
MemoryStream m = new MemoryStream();
newImage.Save(m, ImageFormat.Jpeg);
return m.GetBuffer();
}
}
}
}
private static Size CalculateDimensions(Size oldSize, int targetSize)
{
Size newSize = new Size();
if (oldSize.Height > oldSize.Width)
{
newSize.Width = (int)(oldSize.Width * ((float)targetSize / (float)oldSize.Height));
newSize.Height = targetSize;
}
else
{
newSize.Width = targetSize;
newSize.Height = (int)(oldSize.Height * ((float)targetSize / (float)oldSize.Width));
}
return newSize;
}
public static void InsertNews(string title, string summary, string news, byte[] photoOriginal,
string photosize, string legend)
{
DBAccess db = new DBAccess();
db.AddParameter("@Title", title);
db.AddParameter("@Summary", summary);
db.AddParameter("@News", news);
db.AddParameter("@PhotoOriginal", photoOriginal);
db.AddParameter("@Photo", ResizeImageFile(photoOriginal, 280));
db.AddParameter("@PhotoThumb", ResizeImageFile(photoOriginal, 80));
db.AddParameter("@PhotoSize", photosize);
db.AddParameter("@Legend", legend);
db.AddParameter("@Date", DateTime.Now);
db.AddParameter("@Author", UtilMembership.CurrentUserName);
db.ExecuteNonQuery("dev_News_Insert");
}
No meu curso de News eu explico como fazer.
Fabio
Gostei + 0
15/03/2010
Fernando Reis
Deixa ver se entendi,
este codigo pega uma imagem,
e cria uma outra com o tamanho definido, esta correto???
Gostei + 0
15/03/2010
Fabio Mans
Fabio
Gostei + 0
15/03/2010
Fernando Reis
na verdade não,
deixa tentar explicar
por exemplo tenh ouma foto com H180 X W240
preciso por padrão 40 X 40
se eu fizer um redimensionamento padrão a foto ficará distorcida, correto?
imagine que eu tenho um quadrado na mão de 40 x 40 coloco acima da foto, bem no meio e recorte esta imagem e faça um upload desta NOVA image.
entende?
Gostei + 0
15/03/2010
Fabio Mans
Gostei + 0
15/03/2010
Fabio Mans
Gostei + 0
15/03/2010
Fernando Reis
Desculpe minha "ignorância"
Mas pelo que li , ainda acho que não fui claro..
vou tentar novamente. ( me permita)
Tenho uma imagem de Height :100 X 200 Width:.
o Centro desta imagem esta em 50 H e 100 W.
a partir deste ponto CENTRAL
quero criar uma nova imagem com : 20 Pixels para direita e esquerda e 20 Pixel Baixo e Acima.
Não quero DIMENSIONAR A IMAGEM.
seria como ....... recortar a imagem...entende?
quero pegar a imagem original e recortar 40x40 bem no meio dela. sem me preocupara com distorção....
Vi um exemplo que trabalhava com uma expressão chamada "Rectangle",
sera isto?
Gostei + 0
15/03/2010
Fabio Mans
Gostei + 0
15/03/2010
Fernando Reis
É O PRIMEIRO,
VALEU,
DEU CERTINHO
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)