Hola amigos...
Aquí les dejo un código para generar Thumbnail sin pixelar. Si bien encontré en todo lugar código que genera thumnail, el problema era que las imagenes quedaban super pixeladas, así que ahora con el código que coloco aquí, la foto queda como suavizada, lo que evita que se vea pixelada.
El código que debemos colocar es:
public void guardarFotoThumbnail(string srcnormal, string srcthumb)
{
System.Drawing.Image image = System.Drawing.Image.FromFile(srcnormal);
getDimensionSinDistorsionar(image.Width, image.Height);
generateThumnail(image, image.Width, image.Height, srcthumb);
}
public void getDimensionSinDistorsionar(int anchoOriginal, int altoOriginal)
{
double limitAnchoAlto = 150; //este valor lo puedes modificar, segun el tamano que quieras
//identifico maximo valor
double maximoValor;
if (anchoOriginal > altoOriginal)
maximoValor = Convert.ToDouble(anchoOriginal);
else
maximoValor = Convert.ToDouble(altoOriginal);
//regla de tres con la dimension del thumnail y el maximo valor
double porcentajeImagenReduccion = limitAnchoAlto / maximoValor;
//asignar valores para thumnail
anchoThumnail = Convert.ToInt32(Convert.ToDouble(anchoOriginal) * porcentajeImagenReduccion);
altoThumnail = Convert.ToInt32(Convert.ToDouble(altoOriginal) * porcentajeImagenReduccion);
}
public void generateThumnail(System.Drawing.Image imageOriginal, int srcWidth, int srcHeight, string srcthumb)
{
System.Drawing.Image image = imageOriginal;
System.Drawing.Image thumbnail = new Bitmap(anchoThumnail, altoThumnail);
System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(thumbnail);
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphic.CompositingQuality = CompositingQuality.HighQuality;
graphic.DrawImage(image, 0, 0, anchoThumnail, altoThumnail);
ImageCodecInfo[] info;
info = ImageCodecInfo.GetImageEncoders();
EncoderParameters encoderParameters;
encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
thumbnail.Save(srcthumb, info[1], encoderParameters);
}
Lo que tenemos que hacer entonces es llamar la siguiente función:
guardarFotoThumbnail(saveLocation, saveLocationThumb);
donde el primer parámetro es la ruta de la foto original, y el segundo, la ruta donde se va a guardar el thumbnail. Los dos son tipo string.
Nota: Recuerda que para que funcione el código anterior debemos de agregar los siguientes using en la página:
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
Además, recuerda que para generar los thumnails y poder guardar archivos debes tener los permisos adecuados sobre la carpeta.
Espero te sirva.
Sean felices! :)
A aquel que se ha "matado" encontrando la solución. Le doy las gracias mediante este blog. Y lo que aprendí de él, lo comparto con todos.
Busca lo que quieras
Suscribirse a:
Enviar comentarios (Atom)
Palabras Clave
.NET
(93)
AJAX
(2)
ajaxcontroltoolkit
(2)
Algoritmos
(1)
android
(1)
Angular
(1)
Arrays
(1)
AS2 o ActionScript 2.0
(1)
AS3 o ActionScript 3.0
(64)
ASP
(7)
ASP.NET
(3)
Azure
(1)
Azure DevOps
(2)
Backup
(2)
Batch
(4)
blogger
(1)
Browser Support
(2)
C#
(53)
Charts
(1)
Chorme extensions
(1)
Chrome
(3)
cmd
(18)
código postal
(1)
Colombia tips
(1)
command
(1)
Conexion remota
(1)
Controles Web .NET
(24)
Cookies
(1)
cordova
(1)
CSS
(14)
CSV
(5)
Cufon
(1)
DateTime
(2)
deployment
(2)
Desarrollo movil
(2)
Desarrollo web
(5)
Diseño
(4)
DNN o DotNetNuke
(5)
docker
(1)
Encuestas
(1)
Entity Framework
(1)
Error
(1)
Eval
(2)
Excel
(4)
Expresiones regulares
(2)
Facebook
(14)
fechas
(1)
Fiddler
(1)
FileUpload
(1)
Filezilla
(1)
Firefox
(2)
Flash
(9)
Fonts
(3)
FQL
(1)
frameworks
(2)
Futuro de la web
(1)
git
(1)
Google Code
(13)
Google Maps
(4)
hackintosh
(3)
hazard 10.6.2
(3)
herramientas para developers
(1)
highchart
(1)
Hilos
(2)
Hosting Windows
(18)
HTML
(38)
HTML5
(6)
IDE
(1)
IE
(2)
IE9
(1)
IIS
(13)
imagenes
(3)
jasmine
(2)
java
(1)
jqgrid
(2)
Jquery y Javascript
(90)
jquery-ui
(5)
jQueryMobile
(1)
JSON
(1)
knockout
(4)
library
(1)
Link Interesantes
(2)
List
(1)
Macro
(2)
Matemáticas
(2)
Membership
(6)
Memoria
(1)
Mis Experiencias
(3)
momentjs
(1)
ms-dos
(1)
MSN
(1)
MVC
(1)
MVC4
(3)
MySQL
(2)
node.js
(4)
Notepad++
(3)
Notificaciones
(1)
ObjectDataSource
(2)
Online
(2)
Opinión
(4)
OSX
(3)
Parallels Plesk Panel
(1)
petapoco
(1)
PhantomJS
(1)
PHP
(4)
Porqué este blog
(1)
Powershell
(1)
Razor
(3)
Redes
(2)
REGEX
(4)
REST
(1)
SDK Android
(1)
Seguridad
(1)
SelectParameters
(1)
Selenium
(2)
sencha
(3)
sencha cmd
(2)
SEO
(1)
SMTP
(2)
Software útil
(8)
Solución
(1)
Soporte
(1)
SQL
(15)
SQL Server
(58)
SQLite
(2)
Store Procedures
(20)
String
(5)
Testing Code
(2)
texto
(2)
tips de datos
(1)
tips de desarrollo
(1)
TutoFaceAS3
(4)
TutoProAS3
(4)
Tutoriales
(7)
Tweenlite effects
(3)
Últimas noticias
(1)
unit testing
(1)
usb
(1)
VBA
(1)
Video
(1)
virus
(1)
Web API
(2)
Web Browsers
(1)
Web Forms
(7)
web.config
(1)
Webmaster
(8)
Webmatrix
(1)
webrole
(1)
webservices
(1)
webstorm
(1)
Win Forms
(5)
Windows
(21)
Windows 7
(1)
Windows 8
(1)
XML
(2)
Youtube API
(2)
Me acaba de encontrar con tu codigo, bastante util, gracias, probando!!
ResponderEliminarEspero te sirva... saludos... y gracias por comentar! ;)
ResponderEliminarAcabo de usar tu código, la verdad me fue super útil.
ResponderEliminarLo única que modifiqué porque me daba error es en el método generateThumnail
estas líneas (las copio por si alguien tuvo el mismo error "Error genérico en GDI+.")
//thumbnail.Save(srcthumb, info[1], encoderParameters);
Bitmap bmap = new Bitmap(thumbnail);
bmap.Save(srcthumb, info[1], encoderParameters);
Solo eso, saludos y Gracias!
Hola amigo yo ya reemplaze esas lineas pero me sigue saliendo "Error genérico en GDI+."
Eliminarenvio el codigo de generatethumbail
System.Drawing.Image image = imageOriginal;
System.Drawing.Image thumbnail = new Bitmap(anchoThumnail, altoThumnail);
System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(thumbnail);
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphic.CompositingQuality = CompositingQuality.HighQuality;
graphic.DrawImage(image, 0, 0, anchoThumnail, altoThumnail);
ImageCodecInfo[] info;
info = ImageCodecInfo.GetImageEncoders();
EncoderParameters encoderParameters;
encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
//thumbnail.Save(srcthumb, info[1], encoderParameters);
Bitmap bmap = new Bitmap(thumbnail);
bmap.Save(srcthumb, info[1], encoderParameters);
Muchas gracias por tu aporte compañero.
EliminarOye, muchas gracias por tu aporte. Espero que te haya sido de utilidad.
ResponderEliminarSaludos.
YAYA!!! gracias por el código, me salvó como no tienes idea
ResponderEliminarMe alegro que te haya servido.
Eliminarcompartan la solucion...
ResponderEliminarLa solución Solución al mensaje "Error genérico de GDI+"
ResponderEliminarEl problema viene por la ruta que estan utilizando, cuando lo publican en el servidor y mantienen esa misma ruta para el thumbail
con el mismo nombre de la imagen mayor.. srcnormal y srcthumb
En este metodo
public void guardarFotoThumbnail(string srcnormal, string srcthumb)
{
System.Drawing.Image image = System.Drawing.Image.FromFile(srcnormal);
getDimensionSinDistorsionar(image.Width, image.Height);
generateThumnail(image, image.Width, image.Height, srcthumb);
}
Unicamente le cambie el nombre al thumbail y aun guardandola en la misma ruta de la grande ya no arroja el error..
Espero les sirva.
Gracias por el codigo, fue de gran ayuda para Mi.
Saludos
AC
Super, thanks
Eliminar