Avatar billede dj_uncas Nybegynder
17. maj 2005 - 00:13 Der er 5 kommentarer og
1 løsning

Resize billeder mens proportionerne holdes

Jeg er i gang med et billedegalleri, og arbejder pt. på en upload funktion. Der skal gemmes et billede + en thumbnail, og det er det med at resize til thumb der giver problemer.

Jeg vil gerne have at alle billederne er f.eks. 120px høje, og så skal bredden regnes ud, så størrelsesforholdet mellem højde og bredde er det samme som på det originale billede.

Jeg har prøvet med følgende:

if (Img.Width > Img.Height)
{
    ThumbHeight = (Img.Width/Img.Height)*120;
}
   
else if (Img.Width < Img.Height)
{
    ThumbWidth = (Img.Height/Img.Width)*120;
}

hvilket virker fint så længe billedet er bredere end det er højt. Hvis det er omvendt bliver billedet højere end 120px, hvilket ikke er meningen! Er der nogen der kan se hvad det er jeg skal lave om?
Avatar billede snepnet Nybegynder
17. maj 2005 - 02:23 #1
hej dj :o)

kan du ikke lave en helt generel en, hvor du regner med en faktor?

hvis højden er din konstant :

private const float HEIGHT = 120F; // F for float

så kan du lave din udregning sådan her :

float factor = HEIGHT / (float)img.Height;               
float width = (float)img.Width * factor;
ThumbWidth.Height = (int)HEIGHT;
ThumbWidth.Width = (int)width;

(du bliver nødt til at tvinge beregningerne igennem pr. float.... ellers resikerer du bare at få 0 ud. efterfølgende må du så æde en afrunding, men det har nok ikke rigtig nogen betydning i denne forbindelse vil jeg tro).

du kan læse det sådan her :

hvis din oprindelige højde * en faktor skal være lig K (hvor K er din konstant - altså 120 i dit eksempel) :

H1*F=K (den oprindelige højde gange faktoren skal være = 120)

så er din faktor :

F=K/H1 (faktoren = 120 / den oprindelige højde)

og hvis billedets proportioner skal holdes - får du så den nye bredde ved faktoren

B2=B1*F (den nye bredde = den oprindelige bredde * faktoren)

kan du bruge den ?

mvh
(i dit eget regnestykke vil du i princippet kun få en højde på 120 hvis billedet er kvadratisk, og divisionen dermed giver 1.... du ganger jo med 120 bagefter. grunden til at du får noget fornuftigt ud når du har et billede der er bredere end det er højt, er på grund af den afrunding der sker ved at du smider resultatet ind i en int. prøv f.eks. med et billede der er dobbelt så bredt som det er højt - så ender du med et billede der er 240 højt istedet).
Avatar billede coderdk Praktikant
17. maj 2005 - 06:35 #2
float Scale  = 120 / Img.Height;
ThumbHeight = (int) Scale * Img.Height;
ThumbWidth = (int) Scale * Img.Width;
Avatar billede dj_uncas Nybegynder
17. maj 2005 - 12:12 #3
coderdk-> Dit svar virker ikke, det giver bare en billedstørrelse på 0*0.

snepnet-> Dit svar virker til gengæld perfekt! Også skønt med en ordentlig forklaring.. Vil du have point?
Avatar billede coderdk Praktikant
17. maj 2005 - 12:32 #4
Underligt, det er ellers snepnet's metode jeg brugte kan jeg se :) heheh
Avatar billede snepnet Nybegynder
17. maj 2005 - 12:36 #5
du får et svar her :o)
coderdk>> det er fordi du dividerer to integers - din Scale får kun heltalsværdier.
sådan her skulle den holde hjem :
float Scale  = 120F / (float)Img.Height;
mvh
Avatar billede coderdk Praktikant
17. maj 2005 - 12:44 #6
Ah ja :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester