Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258

    Crop e Resize rettangolare

    In rete ho trovato degli script asp.net (che io richiamo da pagine asp) che mi fanno il crop e il resize dell'immagine...l'unico problema è che tagliano l'immagine in un quadrato mentre io avrei bisogno di un'immagine rettangolare.

    Ho cercato in giro ma non ho trovato niente.

  2. #2
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    il codice dello script che fa il resize e il crop delle immagini e le trasforma in quadrati è:

    codice:
    <%@ Page Language="VB"%>
    <%@ import Namespace="System.Drawing"%>
    <%@ import Namespace="System.Drawing.Imaging"%>
    <%@ import Namespace="System.Text.RegularExpressions"%>
    
    <%
    dim strFilename as string
    dim i as System.Drawing.Image
    dim b as System.Drawing.bitmap
    dim g as graphics
    If Left(request.QueryString("img"),4) = "http" then
    	'Response.Write("case1
    ")
    	strFilename=server.mappath(right(request.QueryString("img"),len(request.QueryString("img"))-len(Request.ServerVariables("SERVER_NAME"))-7))
    else
    	'Response.Write("case2
    ")
    	strFilename = server.mappath(request.QueryString("img"))
    end if
    i = System.Drawing.Image.FromFile(strFilename)
    b = New system.drawing.bitmap(request.QueryString("opx"), request.QueryString("opx"), pixelformat.format24bpprgb)
    g = graphics.fromimage(b)
    g.InterpolationMode = 2
    g.SmoothingMode = 4
    g.PixelOffsetMode = 4
    g.CompositingQuality = 4
    
    ’ scale and translate the image
    Dim NewLar, NewAlt, SrcX, SrcY
    If i.height>i.width then
    	NewLar = i.width
    	NewAlt = i.width
    	SrcX=0
    	SrcY = (((i.height*request.QueryString("opx"))/i.width)-request.QueryString("opx"))/2
    else
    	NewLar = i.height
    	NewAlt = i.height
    	SrcY = 0
    	SrcX = (((i.width*request.QueryString("opx"))/i.height)-request.QueryString("opx"))/2
    
    end if
    g.drawimage(i,New rectangle(0,0,request.QueryString("opx"),request.QueryString("opx")), New rectangle(SrcX,SrcY,NewLar,NewAlt), GraphicsUnit.Pixel)
    'Response.Write(NewLar & " " & NewAlt & " " & SrcX & " " & SrcY)
    response.contenttype="image/jpeg"
    b.save(response.outputstream, imageformat.jpeg)
    b.dispose() 
    %>
    viene richiamato così: square.aspx?img=immagine.jpg&opx=150 dove 150 è l'altezza e la larghezza

    Qualcuno mi da una mano a cercare di capire come fare a fargli creare rettangoli anzicchè quadrati?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Premesso che io non conosco (e aborro ) VB, mi pare di aver capito che le uniche variabili in gioco che ti interessano sono NewLar e NewAlt.

    Nel caso del codice che hai postato queste vengono impostate uguali alla più piccola delle dimensioni dell'immagine originale (cioè se è piu alta che larga si fa un quadrato di lato uguale alla larghezza, e viceversa).

    Nel tuo caso basterà valorizzare NewLar e NewVal ai valori desiderati per ottenere un rettangolo. Il resto del codice, immagino, farà il crop.

  4. #4
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Stavo abozzando qualcosa ma ho bisogno di un valido aiuto.

    in questo modo l'immagine non è più quadrata ma rettangolare (800x300), riesco ad adattare anche l'immagine (per ora sto facendo prove con immagini di altezza superiore alla larghezza(primo if))...ma se cambio immagine non mi trovo più (è anche ovvio poichè sto usando numeri fissi anzicchè variabili (ad es.: NewLar = opxLARGHEZZA/1.52 invece che NewLar = opxLARGHEZZA/Qualche Formula).

    codice:
    <%@ Page Language="VB"%>
    <%@ import Namespace="System.Drawing"%>
    <%@ import Namespace="System.Drawing.Imaging"%>
    <%@ import Namespace="System.Text.RegularExpressions"%>
    
    <%
    dim strFilename as string
    dim opxLARGHEZZA as string
    dim opxALTEZZA as string
    dim i as System.Drawing.Image
    dim b as System.Drawing.bitmap
    dim g as graphics
    If Left(request.QueryString("img"),4) = "http" then
    	'Response.Write("case1
    ")
    	strFilename=server.mappath(right(request.QueryString("img"),len(request.QueryString("img"))-len(Request.ServerVariables("SERVER_NAME"))-7))
    else
    	'Response.Write("case2
    ")
    	strFilename = server.mappath(request.QueryString("img"))
    end if
    i = System.Drawing.Image.FromFile(strFilename)
    opxLARGHEZZA="800"
    opxALTEZZA="300"
    b = New system.drawing.bitmap(opxLARGHEZZA, opxALTEZZA, pixelformat.format24bpprgb)
    g = graphics.fromimage(b)
    g.InterpolationMode = 2
    g.SmoothingMode = 4
    g.PixelOffsetMode = 4
    g.CompositingQuality = 4
    
    ’ scale and translate the image
    Dim NewLar, NewAlt, SrcX, SrcY
    If i.height>i.width then
    	NewLar = opxLARGHEZZA/1.52
    	NewAlt = opxALTEZZA/1.52
    	SrcX=0
    	SrcY = (((i.height*opxALTEZZA)/i.width)-opxALTEZZA)/2
    else
    	NewLar = i.height
    	NewAlt = i.height
    	SrcY = 0
    	SrcX = (((i.width*request.QueryString("opx"))/i.height)-request.QueryString("opx"))/2
    
    end if
    g.drawimage(i,New rectangle(0,0,opxLARGHEZZA,opxALTEZZA), New rectangle(SrcX,SrcY,NewLar,NewAlt), GraphicsUnit.Pixel)
    'Response.Write(NewLar & " " & NewAlt & " " & SrcX & " " & SrcY)
    
    Response.ContentType = "image/jpeg"
    b.Save(Response.OutputStream, ImageFormat.Jpeg)
    b.Dispose()
    %>

  5. #5
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Un aiutino?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.