90 messaggi dal 26 marzo 2007
Ciao a tutti,
ho letto e ho scaricato il file per il resize immagini presente nella sezione script al link:

http://www.aspitalia.com/script/401/Ridimensionare-Immagini-.NET.aspx

e adesso sono in procinto di usarlo.
Ho un po capito come funziona ho pero un dubbio. Come faccio a salvare l' immagine originale e la Thumb in una cartella predefinita sul server web ad es Public?
Dovrei inserire un path, ma non so come implementarlo nello script.
Grazie anticipatamente
quando hai lo stream puoi salvarlo più volte.

comunque se cerchi esiste un'altro script che suggerisce una tecnica differente, ovvero salvi l'immagine nella dimensione originale e la ridemensioni "al volo"

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
90 messaggi dal 26 marzo 2007
Potresti darmi il link, per favore?
http://www.aspitalia.com/script/501/HttpHandler-Ridimensionare-Volo-Immagini.aspx

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
3.939 messaggi dal 28 gennaio 2003
In effetti si può fare in più modi. Uno però è anche quello di salvare l'immagine originale inviata, creare la miniatura, e salvarla su disco.

Dal link citato ho fatto questo esempio. L'ho modificato un poco perchè non sono interessato all'altezza e alla larghezza della miniatura, ma alla dimensione massima.
Nota che l'esempio è minimale, da puro esercizio. Ad esempio non fa il controllo se viene spedito qualcosa, se quello stedito è una immagine jpg.

    <form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <br /><br />
        <asp:Button ID="Button1" runat="server" Text="Invia" />
        <hr />
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </div>
    </form>


Option Strict On

Partial Class prove_a
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        'ricavo il nome del file con percorso 
        Dim strFile As String = Me.FileUpload1.PostedFile.FileName

        'ricavo il nome del file senza percorso 
        Dim strNomeFile As String = Path.GetFileName(strFile)

        'percorso di upload 
        Dim strPercorsoFileUpload As String = "c:\tmp"

        'file trasferito 
        Dim strPercorsoFileUploadFile As String = Path.Combine(strPercorsoFileUpload, strNomeFile)

        'salvataggio 
        Me.FileUpload1.PostedFile.SaveAs(strPercorsoFileUploadFile)

        'nome miniatura
        Dim nomeMiniatura As String = Path.GetFileNameWithoutExtension(strNomeFile) & "_miniatura" & Path.GetExtension(strNomeFile)

        'nome completo di percorso per la miniatura
        Dim nomeMiniaturaConPercorso As String = Path.Combine(strPercorsoFileUpload, nomeMiniatura)

        'salvo l'immagine originale e la miniatura
        ResizeAndSave(Me.FileUpload1.PostedFile.InputStream, 300, nomeMiniaturaConPercorso)


        'mostro l'immagine ridotta
        Me.Literal1.Text = String.Format("<img src=""/tmp/{0}""  />", nomeMiniatura)


    End Sub



    Private Sub ResizeAndSave(ByVal imgStr As Stream, ByVal dimMax As Integer, ByVal FileName As String)
        'creo il bitmap dallo stream 
        Dim bmpStream As System.Drawing.Image = System.Drawing.Image.FromStream(imgStr)

        Dim w As Integer = bmpStream.Width
        Dim h As Integer = bmpStream.Height

        'data la dimensione massima, imposto larghezza o altezza
        'a seconda se l'immagine è orizzontale o verticale
        'poi calcolo l'altro lato in proporzione
        Dim width, height As Integer
        If w >= h Then
            width = dimMax
            height = Convert.ToInt32(CDbl(width) * CDbl(h) / CDbl(w))
        Else
            height = dimMax
            width = Convert.ToInt32(CDbl(height) * CDbl(w) / CDbl(h))
        End If


        'creo un nuovo bitmap ridimensionandolo 
        Dim img As New Bitmap(bmpStream, New Size(Width, Height))

        'salvo l'immagine ridimensionata 
        img.Save(FileName, System.Drawing.Imaging.ImageFormat.Jpeg)

    End Sub

End Class
90 messaggi dal 26 marzo 2007
io l' esempio l' ho adattato cosi, ma non so se funziona..
ho ottenuto la seguente classe internal( è internal perchè sarà richiamata da un metodo insert e update della classe manager che si occupa di inserire e modificare i contenuti)
internal class ResizeManager
{
public ResizeManager()
{
//
// TODO: aggiungere qui la logica del costruttore
//
}

private void ResizeAndSave(Stream imgStr, int Width, int Height, string FileName)
{
//creo il bitmap dallo stream
System.Drawing.Image bmpStream = System.Drawing.Image.FromStream(imgStr);
//creo un nuovo bitmap ridimensionandolo
Bitmap img = new Bitmap(bmpStream, new Size(Width, Height));
//salvo l'immagine ridimensionata
img.Save(FileName, System.Drawing.Imaging.ImageFormat.Jpeg);


}

private void CaricaClick(FileUpload File1)
{

Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
//controllo che sia un jpg
if (File1.PostedFile.ContentType == "image/jpeg")
{
string myFoto = File1.FileName;
//pass lo stream del file uplodato
ResizeAndSave(File1.PostedFile.InputStream, 100, 70, myFoto);
//salvo così com'è
File1.PostedFile.SaveAs("~/Public/" + myFoto);

MemoryStream DataM = new MemoryStream(File1.FileBytes);
ResizeAndSave(DataM, 100, 70, "~/Public/Thumb/"+myFoto);
}
}

}

come posso migliorarla? e dove sbaglio?
Grazie anticipatamente
Modificato da thehorn il 20 aprile 2009 12.16 -
90 messaggi dal 26 marzo 2007
L' ho aggiustata un po, sempre che funzioni.....
internal class ResizeManager
{



private void ResizeAndSave(Stream imgStr, int Width, int Height, string FileName)
{
//creo il bitmap dallo stream
System.Drawing.Image bmpStream = System.Drawing.Image.FromStream(imgStr);
//creo un nuovo bitmap ridimensionandolo
Bitmap img = new Bitmap(bmpStream, new Size(Width, Height));
//salvo l'immagine ridimensionata
img.Save(FileName, System.Drawing.Imaging.ImageFormat.Jpeg);


}

public string Upload(FileUpload File1)
{


//controllo che sia un jpg
if (File1.PostedFile.ContentType == "image/jpeg")

{
int W = int.Parse(File1.Width.ToString()) / 3;
int H = int.Parse(File1.Height.ToString()) / 3;
string myFoto = File1.FileName;
//salvo così com'è
File1.SaveAs("~/Public/" + myFoto);
//Creo lo Stream e lo passo alla funzione insieme alle dimensioni, al percorso,
//e al nome del file.
MemoryStream DataM = new MemoryStream(File1.FileBytes);
ResizeAndSave(DataM, W, H, "~/Public/Thumb/" + myFoto);
return myFoto;
}

// se la verifica non va a buon fine viene restituito il logo.
else { return "logo.jpg"; };

}

}

Come posso fare per migliorarla?
Grazie 10000

Modificato da thehorn il 20 aprile 2009 12.31 -
Modificato da thehorn il 20 aprile 2009 13.26 -
Modificato da thehorn il 20 aprile 2009 13.30 -
Modificato da thehorn il 20 aprile 2009 13.34 -
Modificato da thehorn il 20 aprile 2009 13.36 -
Modificato da thehorn il 20 aprile 2009 13.37 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.