degen18Medlem sedan apr. 20043 inlägg Det är så att jag ska bygga en sida där man kan ladda upp en bild, och den ska skalas om så att jag kan göra en thumbnail.
Så jag behöver en stor bild och en beskuren bild av den bilden jag laddar upp.
Min fråga är om det går lösa och hur isf ??
Jag är nybörjare så det kanske är en väldigt dum fråga men jag hoppas på hjälp och tipps iaf.
Tack på förhand.
renholmMedlem sedan apr. 20012 266 inlägg using(Image image = Image.FromStream(InputStreamen))
{
using(Image newimage = image.GetThumbnailImage(200, 200, null, IntPtr.Zero))
{
// gör något med newimage
}
}
Fungerar, dock blir inte kvaliten den bästa.
renholmMedlem sedan apr. 20012 266 inlägg Använder själv denna:
Bitmap Resize(System.Drawing.Image image, int width, int height)
{
Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format24bppRgb);
bitmap.SetResolution(image.HorizontalResolution, image.VerticalResolution);
using(Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.DrawImage(image,
new Rectangle(0, 0, width, height),
new Rectangle(0, 0 ,image.Width, image.Height),
GraphicsUnit.Pixel);
}
return bitmap;
}
Funkar fint, förutom att det blir en border(1px) på vänster och topkanten.
PMedlem sedan jan. 20012 204 inlägg Här har du lite kod i vb.net som du kan leka med:
Public Shared Function AddManyFiles(ByVal strDir As String)
Dim dirFiles As New DirectoryInfo(strDir)
Dim fiArr As FileInfo() = dirFiles.GetFiles()
Dim fi As FileInfo
For Each fi In fiArr
Dim TIA As System.Drawing.Image.GetThumbnailImageAbort
Dim imgFormat As Imaging.ImageFormat
Dim mImage As System.Drawing.Image
Select Case IO.Path.GetExtension(fi.FullName)
Case ".jpg", ".JPG", ".jpeg", ".JPEG"
imgFormat = Imaging.ImageFormat.Jpeg
Case ".gif", ".GIF"
imgFormat = Imaging.ImageFormat.Gif
Case ".bmp", ".BMP"
imgFormat = Imaging.ImageFormat.Bmp
Case ".png", ".PNG"
imgFormat = Imaging.ImageFormat.Png
End Select
'Try
mImage = mImage.FromFile(fi.FullName)
Dim btm As New Bitmap(mImage)
mImage.Dispose()
mImage = btm
mImage = mImage.GetThumbnailImage(200, 200, TIA, IntPtr.Zero)
mImage.Save(fi.DirectoryName & "\TumbNails\" & fi.Name, imgFormat)
Next
End Function
PDahlenMedlem sedan apr. 2004778 inlägg André Colbjörnsen skrev en bra artikel om högkvalitativa tumnaglar på dotNETfriends.se. http://www.dotnetfriends.se/DesktopDefault.aspx?tabid=45
degen18Medlem sedan apr. 20043 inlägg Tackar så mycket, ska se vad jag kan få ihop av detta
ingen som använder sig av c# ??
renholmMedlem sedan apr. 20012 266 inlägg
degen18 skrev:
ingen som använder sig av c# ??
Båda mina exempel var i C#.
GladhMedlem sedan maj 20012 812 inlägg
Funkar fint, förutom att det blir en border(1px) på vänster och topkanten.
Det löser man med en fuling. Man sätter top och left till -1 istället för 0, och så ökar man på width och height med 1 så löser det sig.
- magnus
degen18Medlem sedan apr. 20043 inlägg oj ursäkta missade det
hmm jag vet inte riktigt hur jag ska använda mig av koden
PDahlenMedlem sedan apr. 2004778 inlägg Hur du ska använda den?
Du ska kalla på funktionen och skicka in en Image , bredd och höjd.
renholmMedlem sedan apr. 20012 266 inlägg
Gladh skrev:
Funkar fint, förutom att det blir en border(1px) på vänster och topkanten.
Det löser man med en fuling. Man sätter top och left till -1 istället för 0, och så ökar man på width och height med 1 så löser det sig.
- magnus
Löste det faktiskt genom att tabort PixelFormat.Format24bppRgb argumentet.
GladhMedlem sedan maj 20012 812 inlägg
Löste det faktiskt genom att tabort PixelFormat.Format24bppRgb argumentet.
Visst, vill man använda B-lösningar så kan man ju göra det :P
- M
CaleMedlem sedan mars 200490 inlägg
P skrev:
Här har du lite kod i vb.net som du kan leka med:
Public Shared Function AddManyFiles(ByVal strDir As String)
Dim dirFiles As New DirectoryInfo(strDir)
Dim fiArr As FileInfo() = dirFiles.GetFiles()
Dim fi As FileInfo
For Each fi In fiArr
Dim TIA As System.Drawing.Image.GetThumbnailImageAbort
Dim imgFormat As Imaging.ImageFormat
Dim mImage As System.Drawing.Image
Select Case IO.Path.GetExtension(fi.FullName)
Case ".jpg", ".JPG", ".jpeg", ".JPEG"
imgFormat = Imaging.ImageFormat.Jpeg
Case ".gif", ".GIF"
imgFormat = Imaging.ImageFormat.Gif
Case ".bmp", ".BMP"
imgFormat = Imaging.ImageFormat.Bmp
Case ".png", ".PNG"
imgFormat = Imaging.ImageFormat.Png
End Select
'Try
mImage = mImage.FromFile(fi.FullName)
Dim btm As New Bitmap(mImage)
mImage.Dispose()
mImage = btm
mImage = mImage.GetThumbnailImage(200, 200, TIA, IntPtr.Zero)
mImage.Save(fi.DirectoryName & "\TumbNails\" & fi.Name, imgFormat)
Next
End Function
kan man kombinera detta med det andra scriptet för att ändra kvaliteten på jpg-bilderna..
jag har bilder som är ca 100KB, tummnaglarna blir då på ca 16KB..
med:
mImage.Save(fi.DirectoryName & "\TumbNails\" & fi.Name, ImageFormat.Gif)
så blir bilderna gif oavsett vilket format de var i från början.
hamnar då på ca 2KB..
Men det känns inte som en helt ren lösning, dessutom blir ju bilderna såklart ruskigt gryniga
jazzilMedlem sedan maj 2003151 inlägg Denna använder jag och den ger fina thumbnails
kolla på Mitt Galleri (De skalas i realtid på galleriet vilket klassen nedan inte gör )
using System;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
namespace dps
{
/// <summary>
/// Detta är klassen som manipulerar bilder när de laddas upp
/// </summary>
public class imgman
{
//Sätt Globala variablar
private int iHeight, iWidth;
private string szFileName;
//Structen som körs när en ny instans skapas
public imgman()
{
//Sätt filnamnet till temp.jpeg som bilden heter precis när den laddats upp.
szFileName = System.Web.HttpContext.Current.Request.MapPath("../ProdImages/temp.jpeg");
iWidth = 200;
iHeight = 200;
}
//När vi skapar en ny arkikel så kallas denna
public string GenerateWithRandomName(string ArtNr)
{
//Kolla på kommentaren till thumbs.aspx
System.Drawing.Image image = System.Drawing.Image.FromFile(szFileName);
Bitmap bmp = new Bitmap(iWidth, iHeight);
Graphics gr = Graphics.FromImage(bmp);
gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
gr.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
gr.DrawImage(image, 0, 0, iWidth, iHeight);
gr.Save();
EncoderParameters eps = new EncoderParameters(1);
eps.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 60);
//Skapa en random generator
Random rand = new Random();
//Får Bildnamnet ARTNR01.jpeg tex
//Den får Artnr plus två random siffror plus filändelser
string Name = ArtNr + rand.Next(10,99).ToString() + ".jpeg";
//Spara bilden till disk
bmp.Save(System.Web.HttpContext.Current.Request.MapPath("../ProdImages/" + Name));
image.Dispose();
bmp.Dispose();
//Ta bort temp bilden
File.Delete(System.Web.HttpContext.Current.Request.MapPath("../ProdImages/temp.jpeg"));
//Och returnera namnet så att det kan sparas i databas.
return Name;
}
}
}
CaleMedlem sedan mars 200490 inlägg jag förstod inte riktigt din kod.. :(
tyckte det var en del saker som deklarerades men som sen aldrig användes ?!
men jag hittade den info jag behövde i
http://www.webforum.nu/showthread.php?s=&forumid=191&threadid=70412&highlight=Encoder
Resultatet:
Dim eps As EncoderParameters = New EncoderParameters(1)
eps.Param(0) = New EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 50)
Dim ici As ImageCodecInfo = GetEncoderInfo("image/jpeg")
dim newFullPath as string = imageFullPathLocation & "tummnaglar/tumme_" & imgUrl
fullSizeImg.Save(newFullPath, ici, eps)
Private Function GetEncoderInfo(ByVal mimeType As String) As ImageCodecInfo
Dim j As Integer
Dim encoders As ImageCodecInfo()
encoders = ImageCodecInfo.GetImageEncoders()
For j = 0 To encoders.Length
If encoders(j).MimeType = mimeType Then
Return encoders(j)
End If
Next j
Return Nothing
End Function