WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Dålig kvalitet i resize med asp.net (https://www.wn.se/forum/showthread.php?t=5099)

Qo-naq 2004-12-20 19:52

2 bifogad(e) fil(er)
Håller på och tillverkar ett skript för att resizea och cropa bilder. Dock har jag mött på ett stort problem...

Bilderna i helt usel kvalitet! Då jag inte har någon anledning att spara bandbredd vill jag ha bra kvalitet på de resizeade bilderna.´

Kod:

public static void makeThumbnail(string orginal, string thumbnail, int maxW, int maxH)
 *{
 *       
 *        System.Drawing.Image img;
 *        System.Drawing.Image thumb;
 *        int w;
 *        int h;
 *        img = System.Drawing.Image.FromFile(orginal);
 *        w = img.Width;
 *        h = img.Height;
 *        if (w > maxW)
 *        {
 * *h = maxW * h / w;
 * *w = maxW;
 *        }
 *        thumb = img.GetThumbnailImage(w, h, null, System.IntPtr.Zero);
 *        if (thumb.Height > maxH)
 *        {
 * *System.Drawing.Bitmap btmImage = new Bitmap(thumb);
 * *Rectangle recCrop = new Rectangle(0, 0, maxW, maxH);
 * *Bitmap btmCrop = new Bitmap(recCrop.Width, recCrop.Height, btmImage.PixelFormat);
 * *Graphics gphCrop = Graphics.FromImage(btmCrop);
 * *Rectangle recDest = new Rectangle(0, 0, maxW, maxH);
 * *gphCrop.DrawImage(btmImage, recDest, recCrop.X, recCrop.Y, recCrop.Width, recCrop.Height, GraphicsUnit.Pixel);
 * *btmCrop.Save(thumbnail);
 *        }
 *        else
 *        {
 * *thumb.Save(thumbnail);
 *        }
 *}

Hur ska jag göra för att bildkvaliteten ska bli bättre?

Bifogar bild på hur det ser ut efter resize med skriptet, respektive i Photoshop.

Starweb 2004-12-20 20:17

Vet inte exakt vad funktionen i ASP.NET heter, men i PHP så ställer man in kvaliten på bilden med funktionen imagejpeg():
http://se.php.net/manual/sv/function.imagejpeg.php

- Alltså hur mycket den ska komprimera bilden, efter att den skalats om.

bool imagejpeg ( resource image [, string filename [, int quality]])


- Det måste/bör finnas en liknande funktion i ASP.NET

Qo-naq 2004-12-20 20:44

Behöver svar, inte fler frågor :P

Kom med fler förslag... står verkligen helt still. Om nån känner till funktionen för grad av komprimering i asp.net, skriv här!

Robert 2004-12-20 20:55

Det beror lite på vad ditt problem är egentligen. Endera tänker du på kvaliten för hur mycket jpg ska komprimeras eller så tänker du på kvaliten på algorithmen som förminskar bilden.


För att pilla på kvalitén (vb.net exempel...sorry!):

Kod:

Const intQuality=25

dim bmpBitmap1 as New Bitmap(server.mappath("images/alima.jpg"))

'Get the list of available encoders
Dim codecs() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders()

'find the encoder with the image/jpeg mime-type
dim iciInfo as ImageCodecInfo
dim item as ImageCodecInfo

for each item in codecs
 *if(item.MimeType="image/jpeg")then iciInfo=item
next

'Create a collection of encoder parameters (we only need one in the collection)
Dim ep as EncoderParameters = new EncoderParameters()

ep.Param(0)= new system.drawing.imaging.EncoderParameter(system.drawing.imaging.Encoder.Quality,intQuality)

'Set the content type
response.contenttype="image/jpeg"

'bmpBitmap1.save(server.mappath("." & "/article_images/alima25.jpg"), iciInfo, ep)
'send the bitmap to the outputstream
bmpBitmap1.save(response.outputstream, iciInfo, ep)

'tidy up
bmpBitmap1.dispose()


..om det gäller algorithmen för att skala om den så vet jag inte hur man gör...

digiArt 2004-12-21 10:15

Utan att testa kodmässigt så läste jag lite i dokumentationen om bitmap, där finns en operation som heter SetResolution som kan sätta upplösning i x och y-led.

Kanske kan vara ngt för dig att läsa in dig på?

Qo-naq 2004-12-21 10:31

Citat:

Originally posted by digiArt@Dec 21 2004, 11:15
Utan att testa kodmässigt så läste jag lite i dokumentationen om bitmap, där finns en operation som heter SetResolution som kan sätta upplösning i x och y-led.

Kanske kan vara ngt för dig att läsa in dig på?

Ska kolla upp det!.
Tack!

matlin 2005-03-11 23:08

För att anknyta till PHP svaret ovan så får man bättre kvalitet om man kopierar och resizear en bild genom att använda php-funktionen "imagecopyresampled" om det nu hjälper nåt, jag vet inte om det finns nåt liknande för att resampla bilder i .NET men det var enm tanke iaf.

Jonas 2005-03-12 09:59

Personligen så anser jag att "imagemagick" är suveränt.

GD är så begränsat. imagemagick's API fungerar med PHP, ASP, .NET, you name it.

http://www.imagemagick.org/

Kan vara mycket att läsa in osv men du tjänar in det på dina underbart fina bilder sen :)

hnn 2005-03-12 14:14

Med tanke på ASP.NET är STORT (Du kan koda ASP.NET i princip vilket språk du vill) så kanske du ska säga att det gäller C#?

Det är väldigt stor skillnad på dom olika språken...


Då jag själv enbart lekt med ASP.NET när det gäller bilder så kan jag starkt rekommendera ImageMagicks API som är väldigt enkelt och kraftfullt...

kullervo 2005-03-12 17:22

Citat:

Originally posted by hnn@Mar 12 2005, 14:14
Du kan koda ASP.NET i princip vilket språk du vill
Hur går det ihop? Det måste ju vara färdigt stöd får språket för att man ska kunna koda det i ASP.NET, eller misstar jag mig?


Alla tider är GMT +2. Klockan är nu 23:46.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson