Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Resize slike u GridView ili DetailsView ?

[es] :: .NET :: Resize slike u GridView ili DetailsView ?

[ Pregleda: 4175 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

almisa
Misa Aleksic
Srbija

Član broj: 104495
Poruke: 59
213.244.197.*



Profil

icon Resize slike u GridView ili DetailsView ?07.09.2007. u 18:03 - pre 202 meseci
Imam slike u folderu slike na web serveru. Na stranici Pregled.aspx prikazujem sliku u GridView ili DetailsView i jos neke podatke iz baze. Problem mi je sto su slike u folderu slike razlicitih dimenzija (unose ih clanovi sajta) obicno 800x600 i vece a na Pregled.aspx stranici zelim prikazati umanjenu sliku ali tako da ne izgubi na odnosu visina:sirina, znaci ne mogu u polje za prikaz slike fiksno da podesim vrednosti za visinu i sirinu slike. Hteo bih da smanji sliku sve dok recimo sirina ne bude manja od 50px a pritom da tu sliku prikazem u neku od kontrola GridView ili DetailsView.

Ima li neko ideju kako ovo da uradim?
 
Odgovor na temu

TheBatA
Miljan Komatina
Senior software developer, QUANTUM -
AutoMARKET
Beograd

Član broj: 25309
Poruke: 64
80.93.229.*

Sajt: www.AutoMARKET.rs


Profil

icon Re: Resize slike u GridView ili DetailsView ?07.09.2007. u 22:44 - pre 202 meseci
Ja sam se malo igrao sa smanjivanjem slika, evo ti metoda koja to radi. Doduše, ona trenutno vrši snimanje u fajl, ali samo je prepravi da ti vraća image objekat umesto da upisuje u fajl...


Code:

       private void resizeImage(string OriginalFile, string NewFile, int NewWidth, int MaxHeight, int MaxWidth, bool OnlyResizeIfWider)
        {
            System.Drawing.Image FullsizeImage = null;
            try
            {
                FullsizeImage = Image.FromFile(OriginalFile);
            }
            catch
            {
               // error
            }
        
                if (OnlyResizeIfWider)
                {
                    if (FullsizeImage.Width <= NewWidth)
                    {
                        NewWidth = FullsizeImage.Width;
                    }
                }

                int NewHeight = FullsizeImage.Height * NewWidth / FullsizeImage.Width;
                if (NewHeight > MaxHeight)
                {
                    // Resize with height instead
                    NewWidth = FullsizeImage.Width * MaxHeight / FullsizeImage.Height;
                    NewHeight = MaxHeight;
                }

                System.Drawing.Image NewImage = FullsizeImage.GetThumbnailImage(NewWidth, NewHeight, null, IntPtr.Zero);

                // Clear handle to original file so that we can overwrite it if necessary
                FullsizeImage.Dispose();

                // Save resized picture
                try
                {

                     NewImage.Save(NewFile);
                }
                catch 
                {
                   // error
                }
        }

Ashes to ashes - dust to dust. Zejtin to ulje - mast to mast.
 
Odgovor na temu

Prokleta_Nedelja
Beograd

Član broj: 90608
Poruke: 450
91.191.23.*



+42 Profil

icon Re: Resize slike u GridView ili DetailsView ?08.09.2007. u 08:16 - pre 202 meseci
Probao sam ovaj kod i on stvarno smanji sirinu i visinu ali zato memorija koju slika zauzima ostaje ISTA ili cak veca. Ja bih htio da slike smanjujem radi lakseg ucitavanja na stranici. Kako sad?
 
Odgovor na temu

almisa
Misa Aleksic
Srbija

Član broj: 104495
Poruke: 59
*.vdial.verat.net.



Profil

icon Re: Resize slike u GridView ili DetailsView ?08.09.2007. u 09:50 - pre 202 meseci
Koliko sam shvatio jedan od nacina da to ostvaris je da prilikom upload slike snimis i njenu umanjenu sliku - Thumbnail.
Evo linkova na koje mozes da vidis i kako:
http://www.codeproject.com/asp...select=1265625&tid=1265625
http://www.4guysfromrolla.com/webtech/011201-1.shtml
 
Odgovor na temu

TheBatA
Miljan Komatina
Senior software developer, QUANTUM -
AutoMARKET
Beograd

Član broj: 25309
Poruke: 64
80.93.242.*

Sajt: www.AutoMARKET.rs


Profil

icon Re: Resize slike u GridView ili DetailsView ?08.09.2007. u 10:28 - pre 202 meseci
Citat:
Prokleta_Nedelja: Probao sam ovaj kod i on stvarno smanji sirinu i visinu ali zato memorija koju slika zauzima ostaje ISTA ili cak veca. Ja bih htio da slike smanjujem radi lakseg ucitavanja na stranici. Kako sad?


Eh, sad! Ti bi i da slika bude manja i da zauzima manje memorije! Pa ne može i jare i pare!
Šalim se, naravno.

Nisam o tome razmišljao, pošto mi je prvenstveno ova metoda trebala za snimanje umanjene slike na HDD koju kasnije koristim tako umanjenu.

Što reče almisa, možeš da je snimiš umanjenu pri uploadu ako ti to rešava problem, ali postoji i drugo rešenje, koje dodoše nisam još probao.
Možeš da snimiš sliku u neki Stream umesto na HDD, pa da iz njega generišeš novu sliku.

Pošto se slika na disku snima umanjeno (provereno!) predpostavljam da će i u Streamu biti isto tako umanjena.

To bi izgledalo npr ovako:
Code:

Stream streem = new MemoryStream();
NewImage.Save(streem);
return Image.FromStream(streem);


Ovo je napisano napamet, tako da ne garantujem da radi. Jedino još treba podesiti veličinu streama pri njegovoj inicijalizaciji.

Ashes to ashes - dust to dust. Zejtin to ulje - mast to mast.
 
Odgovor na temu

Prokleta_Nedelja
Beograd

Član broj: 90608
Poruke: 450
91.191.23.*



+42 Profil

icon Re: Resize slike u GridView ili DetailsView ?08.09.2007. u 10:55 - pre 202 meseci
Ne mogu da snimam i umanjene slike prilikom uploada jer se radi o veeeelikom broju slika pa ce mi to predstavljati problem. Svaki korisnik ima od 4 do 7 slika.
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
195.252.78.*



+311 Profil

icon Re: Resize slike u GridView ili DetailsView ?08.09.2007. u 15:04 - pre 202 meseci
Tvoj pristup mi izgleda skroz kontradiktoran, ovamo da kažeš da imaš nedovoljno RAM memorije (slike ti puno zuzimaju) a ovamo ne želiš da ih sačuvaš na disku.
Koliko misliš da ćeš imati korisnika i šta misliš da je problem u tome?
 
Odgovor na temu

Prokleta_Nedelja
Beograd

Član broj: 90608
Poruke: 450
91.191.23.*



+42 Profil

icon Re: Resize slike u GridView ili DetailsView ?08.09.2007. u 19:38 - pre 202 meseci
Dusane, ako si mislio na moj post, posto je on prije tvog, ja nigdje nisam pomenuo da imam nedovoljno RAM memorije. Ne zelim slike da cuvam na disku jer vec imam puno korisnika i puno slika. Ako za svaku sliku budem morao da snimim i thumbnail onda je to jaaako mnogo slika. Treba mi resize slike da bih je prikazao kao thumbnail na stranici i da bi se samim tim slike brze ucitavale. Ovaj kod promjeni samo visinu i sirinu slike ali ne i kolicinu memorije koju zauzimaju sto znaci da ce se stranica istom brzinom ucitavati bilo da se radi o slici dimenzija 800x600 ili 340x255. Ja ne vidim sta je tu kontradiktorno? Samo zelim da od slike na HD napravim thumbnail, prikazem na stranici i da to ne moram da snimim.
 
Odgovor na temu

TheBatA
Miljan Komatina
Senior software developer, QUANTUM -
AutoMARKET
Beograd

Član broj: 25309
Poruke: 64
80.93.229.*

Sajt: www.AutoMARKET.rs


Profil

icon Re: Resize slike u GridView ili DetailsView ?09.09.2007. u 17:19 - pre 202 meseci
Citat:
Prokleta_Nedelja: Ako za svaku sliku budem morao da snimim i thumbnail onda je to jaaako mnogo slika. Treba mi resize slike da bih je prikazao kao thumbnail na stranici i da bi se samim tim slike brze ucitavale. Ovaj kod promjeni samo visinu i sirinu slike ali ne i kolicinu memorije koju zauzimaju sto znaci da ce se stranica istom brzinom ucitavati bilo da se radi o slici dimenzija 800x600 ili 340x255. Ja ne vidim sta je tu kontradiktorno? Samo zelim da od slike na HD napravim thumbnail, prikazem na stranici i da to ne moram da snimim.


Ja te opet ne razumem baš najbolje:
Znači:

1. Ti imaš na HDD slike koje su uploadovali korisnici.
2. Treba ti i prikaz thumbnail slike i full size slika
3. Thumbnail slika se ne čuva na HDD
4. Full size slika treba da zauzima prostor koliki bi zauzela thumbnail slika?

Predpostavljam da ti thumb treba samo za prikaz slike na stranici i da stranica treba da se učitava brzo.
Mislim da ćeš morati da napraviš neki kompromis, pošto ako već ne želiš da čuvaš thumb sliku na HDD, istu moraš da generišeš dinamički koristeći navedenu metodu. Samo dinamičko generisanje thumba zahteva učitavanje full size slike u memoriju i njenu obradu, tako da ti to dosta usporava rad na stranici. Ako ti je brže učitavanje stranice prioritet, moraćeš da žrtvuješ prostor na HDD za snimanje thumbova, za čije učitavanje će trebati manje memorije i vremena.

Brzina ili prostor, pitanje je sad!

Ashes to ashes - dust to dust. Zejtin to ulje - mast to mast.
 
Odgovor na temu

Prokleta_Nedelja
Beograd

Član broj: 90608
Poruke: 450
91.191.23.*



+42 Profil

icon Re: Resize slike u GridView ili DetailsView ?09.09.2007. u 21:32 - pre 202 meseci
Uh tezak izbor. Dobro si me shvatio.
Moracu jos da razmislim sta i kako da uradim. U medjuvremenu pogledajte primjer gdje bih koristio thumbnail, bolje cete shvatiti na sta sam mislio
http://www.adresar.ba/21870/plavi-zamak.aspx
http://www.adresar.ba/21875/zavicaj-mt.aspx
 
Odgovor na temu

Prokleta_Nedelja
Beograd

Član broj: 90608
Poruke: 450
91.191.23.*



+42 Profil

icon Re: Resize slike u GridView ili DetailsView ?11.11.2007. u 09:39 - pre 200 meseci
U medjuvremenu, nasao sam rijesenje onako kako mi odgovara. Stvar je u tome da se napravi prazna aspx stranica npr pregled.aspx koju pozivamo sa QueryStringovima "slika" - putanja do slike i "sirina" tj zeljena velicina. U njen event Page_Load treba da se stavi ovaj kod:


Code:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim slika As String = Server.MapPath(Request.QueryString("slika"))
        
        Dim objImage As System.Drawing.Image
        Dim objThumbnail As System.Drawing.Image
        Dim strServerPath, strFilename As String
        Dim shtWidth, shtHeight As Short

        objImage = objImage.FromFile(slika)
        
        if request.querystring("sirina")=nothing then
        shtwidth=objimage.Width 
        else
        shtWidth = 340
        end if


        ' Work out a proportionate height from width
        shtHeight = objImage.Height / (objImage.Width / shtWidth)
        ' Create thumbnail
        objThumbnail = objImage.GetThumbnailImage(shtWidth, _
          shtHeight, Nothing, System.IntPtr.Zero)
        ' Send down to client
        Response.ContentType = "image/jpeg"
        objThumbnail.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)
        ' Tidy up

        objImage.Dispose()
        objThumbnail.Dispose()
    End Sub


Na svim ostalim stranicama gdje zelim promjeniti velicinu slike Image1.ImageURL="pregled.aspx?slika=slike/moja_slika.jpg&sirina=200"
to je to. Nema cuvanja na hardu, niti ostalih komplikacija
 
Odgovor na temu

[es] :: .NET :: Resize slike u GridView ili DetailsView ?

[ Pregleda: 4175 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.