{"id":57,"date":"2010-12-01T17:45:45","date_gmt":"2010-12-01T16:45:45","guid":{"rendered":"http:\/\/www.andreazin.it\/solutions\/?p=57"},"modified":"2010-12-01T18:18:27","modified_gmt":"2010-12-01T17:18:27","slug":"thumbnail-al-volo-con-net","status":"publish","type":"post","link":"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html","title":{"rendered":"Thumbnail &#8220;al volo&#8221; con .Net"},"content":{"rendered":"<p><span style=\"font-family: arial,helvetica,sans-serif;\">Scarica il file <a href=\"http:\/\/www.andreazin.it\/solutions\/wp-content\/uploads\/2010\/12\/thumbnail.zip\"><span style=\"font-size: large;\">thumbnail.aspx<br \/>\n<\/span><\/a><\/span><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">\u00a0<\/span><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">In tanti anni di programmazione ho messo da parte tanti tips e tanti tricks che potrebbero venire utili a chi si avvicina per la prima volta al mondo della programmazione, specialmente in <strong>c#.<br \/>\n<\/strong>Non so se riuscir\u00f2 ad avere il tempo di mettere on line il materiale che in questi anni ho sviluppato, ma piano piano, spero di riuscire a pubblicare abbastanza articoli da poter essere utile a qualcuno.<\/span><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">Spesso capita, per chi lavora con asp.net di dover fare i conti con immagini caricate dall&#8217;utente tramite un backoffice sviluppato &#8220;ad hoc&#8221;. Immaginiamo ad esempio un sito di e-commerce, l&#8217;utente avr\u00e0 a disposizione un&#8217;area protetta dove amministrare il sito, inserire nuovi prodotti, informazioni e immagini;<br \/>\noppure un sito di un&#8217;agenzia immobiliare, l&#8217;agenzia dovr\u00e0 poter inserire un immobile, le relative informazioni e anche un set di immagini per rendere l&#8217;inserzione pi\u00f9 appetibile per chi cerca casa.<br \/>\n<\/span><span style=\"font-family: arial,helvetica,sans-serif;\">Generalmente l&#8217;utente che usa il backoffice non ha specifiche competenze informatiche e quasi sempre non capisce la differenza tra caricare un&#8217;immagine da 3Mb rispetto ad una di 300Kb. In pi\u00f9, le attuali macchine fotografiche digitali scattano fotografia con risoluzioni ormai altissime, pesanti ed inutilmente grandi in contesti web, che porteranno sicuramente l&#8217;utente amministratore del sito, a caricare immagini inutilmente grandi e che rischiano di rallentare in maniera notevole il caricamente delle pagine anche con connessioni a banda larga.<\/span><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">Il programmatore che sviluppa il backoffice del sito, al fine di evitare suicidi di massa nell&#8217;attesa del caricamento delle pagine, dovr\u00e0 cercare di limitare il pi\u00f9 possibile questo problema scegliendo tra almeno 2 soluzioni architetturali:<\/span>\u00a0<\/p>\n<ol>\n<li>\n<div><span style=\"font-family: arial,helvetica,sans-serif;\">Ridurre le immagini &#8220;<strong>on the fly<\/strong>&#8221; quando queste vengono visualizzate nel parte di presentation<\/span><\/div>\n<\/li>\n<li>\n<div><span style=\"font-family: arial,helvetica,sans-serif;\">Ridimesionare le immagini all&#8217;atto del caricamento sul server<\/span><\/div>\n<\/li>\n<\/ol>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">Inutile dire che la seconda ipotesi permette di risparmiare spazio su disco ma \u00e8 un&#8217;operazione irreversibile. Una volta che l&#8217;immagine \u00e8 stata ridimensionata non sar\u00e0 pi\u00f9 possibile visualizzarla con risoluzioni superiori se non con una grave perdita di qualit\u00e0.<br \/>\nOggi spiegher\u00f2 la soluzione 1, come riuscire a ridurre le immagini &#8220;al volo&#8221; senza perdere la qualit\u00e0 e credetemi, nulla di pi\u00f9 semplice.<br \/>\nNon cito nemmeno la possibilit\u00e0 di ridimensionare l&#8217;immagine con gli attributi del tag img html poich\u00e8, come ben sapete, quest&#8217;operazione non riduce la quantit\u00e0 di dati che il client\/browser deve scaricare ma ridimensiona l&#8217;immagine solo dopo averla scaricata e con scarsissimi risultati.<br \/>\n<\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">Innanzitutto un concetto fondamentale:<br \/>\nquando in il browser interpreta il tag html <strong>&lt;img&gt;<\/strong> sa che ricever\u00e0 dal webserver uno stream di byte che lui stesso dovr\u00e0 interpretare e decodificare in base\u00a0al &#8220;content type&#8221;\u00a0che sar\u00e0 inviato sempre dal webserver. Il file dunque che noi specifichiamo all&#8217;interno del tag &lt;img&gt;, verr\u00e0 inviato dal\u00a0webserver come uno stream di bytes al browser. Se si tratta di un file jpg, il webserver lo legger\u00e0 ed invier\u00e0 il contenuto al browser con il content type &#8220;image\/jpeg&#8221;, se si trattasse invece di un file gif, il content type inviato dal webserver sarebbe &#8220;image\/gif&#8221;.<br \/>\nDetto questo, nulla ci vieta dunque di mettere al posto del nome del file da visualizzare un link di altra natura, che punti ad una pagina aspx, che poi ritorni a sua volta uno stream di bytes con gli opportuni content types.<br \/>\nVoglio poter inserire un tag simile: <\/span><br \/>\n<span style=\"font-size: x-small;\"><span style=\"font-family: courier new,courier;\"><span style=\"font-size: small;\">&lt;<span style=\"color: #0000ff;\">img <\/span>src=&#8221;<span style=\"color: #800000;\">thumbnail.aspx?FN=\/public\/images\/test.jpg&amp;amp;MW=800&amp;amp;MH=600<\/span>&#8220;\/&gt;<\/span><\/span><\/span><\/p>\n<p><span style=\"font-size: x-small;\"><br \/>\n<\/span><span style=\"font-family: arial,helvetica,sans-serif;\">Dunque, vediamo di capire come \u00e8 composta la pagina aspx che dobbiamo creare e i concetti che ci stanno dietro&#8230;<\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">Esempio :<\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\"><img loading=\"lazy\" decoding=\"async\" title=\"Gundam 150px\" src=\"http:\/\/www.ilcercacasa.org\/public\/thumb\/thumbnail.aspx?FN=\/public\/images\/gundam.jpg&amp;MH=150\" alt=\"Gundam ridimensionato a 150px\" width=\"95\" height=\"150\" \/>\u00a0Gundam ridimensionato a 150px in\u00a0 altezza (guarda le propriet\u00e0 dell&#8217;immagine per vederil link completo)<\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\"><img loading=\"lazy\" decoding=\"async\" title=\"Gundam 300px\" src=\"http:\/\/www.ilcercacasa.org\/public\/thumb\/thumbnail.aspx?FN=\/public\/images\/gundam.jpg&amp;MH=300\" alt=\"Gundam ridimesionato a 300px\" width=\"190\" height=\"300\" \/>\u00a0Gundam ridimensionato a 300px in\u00a0 altezza (guarda le propriet\u00e0 dell&#8217;immagine per vederil link completo)<\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\"><a title=\"Gundam Originale\" href=\"http:\/\/www.ilcercacasa.org\/public\/images\/gundam.jpg\" target=\"_blank\">Gundam immagine originale<\/a>.<\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">\u00a0<\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">La nostra pagina aspx che andremo a creare accetter\u00e0 3 parametri in ingresso:<\/span>\u00a0<\/p>\n<ol>\n<li><span style=\"font-family: arial,helvetica,sans-serif;\">FN = Path del file immagine da ridimensionare<\/span><\/li>\n<li><span style=\"font-family: arial,helvetica,sans-serif;\">MW = Larghezza in pixel dell&#8217;immagine desiderata<\/span><\/li>\n<li><span style=\"font-family: arial,helvetica,sans-serif;\">MH = Altezza in pixel dell&#8217;immagine desiderata\u00a0<\/span><\/li>\n<\/ol>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">Il codice completo ed utilizzabile \u00e8 allegato all&#8217;articolo. Questo codice che ho scritto implementa in pi\u00f9 anche la possibilit\u00e0 di applicare sopra l&#8217;immagine un logo precedentemente creato per &#8220;etichettare&#8221; per cos\u00ec dire, l&#8217;immagine. Esempi del risultato li potete trovare in tutte le immagine del seguente sito: <a href=\"http:\/\/www.ilcercacasa.org\">http:\/\/www.ilcercacasa.org<\/a><\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">Passiamo a commentare il codice:<\/span>\u00a0<\/p>\n<hr \/>\n<p>\u00a0<\/p>\n<pre class=\"brush:csharp\">private Image getThumbnailImage(Image src, Int32 width, Int32 height){\r\n    return src.GetThumbnailImage(width, height, null, IntPtr.Zero);\t\/\/IntPtr.Zero\r\n}<\/pre>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">Ecco, la funzione descritta sopra <strong><span style=\"text-decoration: underline;\">GetThumbnailImage<\/span><\/strong> \u00e8 una funzione parallela a quella scritta da me. Infatti non tutti sanno che windows memorizza una piccola miniatura di tutte le immagine che elabora all&#8217;interno di un database contenente appunto tutte le miniature che man mano vengono create. Questa funzione non fa altro che estrapolare dal database la miniatura dell&#8217;immagine richiesta (se non esiste la crea sul momento). Questa funzione per\u00f2 ha due grossi limiti. Il primo riguarda le dimensioni dell&#8217;immagine desiderata: la thumbnail (miniatura) che il sistema genera con questo metodo pu\u00f2 essere al massimo di 120 px w\/h, questo significa che se chiamo questa funzione passandole come parametri di ridimensionamento dei valori che superano i <strong>120px<\/strong>, il sistema prima ridimensioner\u00e0 l&#8217;immagine al valore massimo 120px e poi la ridimensioner\u00e0 nuovamente al valore richiesto (es 400px). Il risultato \u00e8 pessimo con una notevole perdita di qualit\u00e0, \u00e8 come se allargassimo digitalmente a 400px un&#8217;immagine di 120px. Il secondo limite \u00e8 un bug della funzione: talvolta e non ho ancora capito perch\u00e8, la funzione all&#8217;interno delle GDI che viene chiamata da GetThumbnailImage ritorna un OutOfMemory facendo esplodere la chiamata.<\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">\u00a0<\/span>\u00a0<\/p>\n<hr \/>\n<p>\u00a0<\/p>\n<pre class=\"brush:csharp\">\/\/Controllo se l'iimagine deve essere ridimensionata...\r\nif(oldImage.Width &gt; lWidth || oldImage.Height &gt; lHeight) {\r\n    xfactor = (1.0 * oldImage.Width \/ lWidth);\r\n    yfactor = (1.0 * oldImage.Height \/ lHeight);\r\n\r\n    if(xfactor &gt;= yfactor) {\r\n        factor = xfactor;\r\n    } else {\r\n        factor = yfactor;\r\n    }\r\n\r\n    \/\/Adesso calcolo le dimensioni in base al fattore...\r\n    lWidth = Convert.ToInt32(oldImage.Width \/ factor);\r\n    lHeight = Convert.ToInt32(oldImage.Height \/ factor);<\/pre>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">\u00a0<\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">In questa parte del codice recuperiamo il fattore di riduzione che dobbiamo applicare alle dimensioni dell&#8217;immagine per poterla ridimesnionare proporzionalmente. Inoltre controlliamo anche se l&#8217;immagine deve essere ridimensionata, infatti l&#8217;utente potrebbe aver inserito un&#8217;immagine talmente piccola da non richiedere il ridimensionamento.<\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">\u00a0<\/span>\u00a0<\/p>\n<hr \/>\n<p>\u00a0<\/p>\n<pre class=\"brush:csharp\">\/\/ Bug di GetThumbnailImage, se ritorno un OutOfMemory, \u00e8 necessario rieseguirla.\r\ntry {\r\n    newImage = getThumbnailImage(oldImage, lWidth, lHeight);\r\n} catch (OutOfMemoryException){\r\n    newImage = getThumbnailImage(oldImage, lWidth, lHeight);\r\n}<\/pre>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">\ud83d\ude41<br \/>\n<\/span><span style=\"font-family: arial,helvetica,sans-serif;\">Queste sono le parti di codice che un programmatore non vorrebbe mai scrivere !\u00a0 E&#8217; la classica &#8220;sporca&#8221;&#8230; che per\u00f2&#8230; in questo caso risolve il problema. Prima menzionavo un bug di questa funzione&#8230; ecco, richiamando la funzione subito dopo l&#8217;OutOfMemory tutto funziona correttamente !!! Incredibile&#8230; ma vero !!! \ud83d\ude0e <\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">\u00a0<\/span>\u00a0<\/p>\n<hr \/>\n<p>\u00a0<\/p>\n<pre class=\"brush:csharp\">\/\/Creo la bitmap nuova che conterr\u00e0 l'immagine\r\nBitmap bmp = new Bitmap(lWidth, lHeight);\r\nbmp.SetResolution(oldImage.HorizontalResolution, oldImage.VerticalResolution);\r\n\r\n\/\/Mi serve l'oggetto Graphics\r\nGraphics grFx = Graphics.FromImage(bmp);\r\n\r\n\/\/Impostazioni globali...\r\ngrFx.CompositingQuality = CompositingQuality.HighQuality;\r\ngrFx.CompositingMode = CompositingMode.SourceOver;\r\ngrFx.InterpolationMode = InterpolationMode.HighQualityBicubic;\r\ngrFx.PageUnit = GraphicsUnit.Pixel;\r\ngrFx.SmoothingMode = SmoothingMode.HighQuality;\r\n\r\n\/\/Ridimensionamento\r\ngrFx.DrawImage(oldImage, 0, 0, lWidth, lHeight);\r\ngrFx.Dispose();\r\nnewImage = bmp;<\/pre>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\"><br \/>\nIn questa parte il codice si spiega da solo, creo un oggetto bitmap delle dimensioni desiderate, da questo genero l&#8217;oggetto Graphics che mi permette di manipolare diversi attributi relativamente alla qualit\u00e0 dell&#8217;immagine, dopodich\u00e8 ridimensiono l&#8217;immagine originale &#8220;appiccicandola&#8221; sopra il mio oggetto bitmap.<br \/>\n<\/span>\u00a0<\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">\u00a0<\/span>\u00a0<\/p>\n<hr \/>\n<p>\u00a0<\/p>\n<pre class=\"brush:csharp\">switch(Path.GetExtension(Server.MapPath(decodedFileName))) {\r\n    case \".jpg\":\r\n        Response.ContentType = \"image\/jpeg\";\t\/\/jpeg\r\n        newImage.Save(Response.OutputStream, ImageFormat.Jpeg);\t\/\/Jpeg\r\n        break;\r\n    case \".jpeg\":\r\n        Response.ContentType = \"image\/jpeg\";\t\/\/jpeg\r\n        newImage.Save(Response.OutputStream, ImageFormat.Jpeg);\t\/\/Jpeg\r\n        break;\r\n    case \".gif\":\r\n        Response.ContentType = \"image\/gif\";\t\t\/\/gif\r\n        newImage.Save(Response.OutputStream, ImageFormat.Gif);\t\/\/Gif\r\n        break;\r\n    case \".png\":\r\n        Response.ContentType = \"image\/png\";\t\t\/\/Png\r\n        newImage.Save(Response.OutputStream, ImageFormat.Png);\t\/\/Png\r\n        break;\r\n    case \".bmp\":\r\n        Response.ContentType = \"image\/bmp\";\t\t\/\/Bmp\r\n        newImage.Save(Response.OutputStream, ImageFormat.Bmp);\t\/\/Bmp\r\n        break;\r\n    default:\r\n        Response.ContentType = \"image\/*\";\t\/\/else\r\n        newImage.Save(Response.OutputStream, ImageFormat.MemoryBmp);\t\/\/else \/ jpeg\r\n        break;\r\n}<\/pre>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">Questa parte invece consente di ordinare al browser come deve interpretare lo stream di bytes che gli verr\u00e0 passato. Se si tratta di una jpeg, il content type sar\u00e0 come gi\u00e0 detto in precedenza: &#8220;image\/jpeg&#8221;, se \u00e8 una gif sar\u00e0 &#8220;image\/gif&#8221; e cos\u00ec via.<br \/>\n<\/span><span style=\"font-family: arial,helvetica,sans-serif;\">\u00a0<\/span>\u00a0<\/p>\n<hr \/>\n<p>\u00a0<\/p>\n<pre class=\"brush:csharp\">switch(Path.GetExtension(Server.MapPath(decodedFileName))) {\r\n    case \".jpg\":\r\n        Response.ContentType = \"image\/jpeg\";\t\/\/jpeg\r\n        newImage.Save(Response.OutputStream, ImageFormat.Jpeg);\t\/\/Jpeg\r\n        break;\r\n    case \".jpeg\":\r\n        Response.ContentType = \"image\/jpeg\";\t\/\/jpeg\r\n        newImage.Save(Response.OutputStream, ImageFormat.Jpeg);\t\/\/Jpeg\r\n        break;\r\n    case \".gif\":\r\n        Response.ContentType = \"image\/gif\";\t\t\/\/gif\r\n        newImage.Save(Response.OutputStream, ImageFormat.Gif);\t\/\/Gif\r\n        break;\r\n    case \".png\":\r\n        Response.ContentType = \"image\/png\";\t\t\/\/Png\r\n        newImage.Save(Response.OutputStream, ImageFormat.Png);\t\/\/Png\r\n        break;\r\n    case \".bmp\":\r\n        Response.ContentType = \"image\/bmp\";\t\t\/\/Bmp\r\n        newImage.Save(Response.OutputStream, ImageFormat.Bmp);\t\/\/Bmp\r\n        break;\r\n    default:\r\n        Response.ContentType = \"image\/*\";\t\/\/else\r\n        newImage.Save(Response.OutputStream, ImageFormat.MemoryBmp);\t\/\/else \/ jpeg\r\n        break;\r\n}<\/pre>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">Questa parte invece consente di ordinare al browser come deve interpretare lo stream di bytes che gli verr\u00e0 passato. Se si tratta di una jpeg, il content type sar\u00e0 come gi\u00e0 detto in precedenza: &#8220;image\/jpeg&#8221;, se \u00e8 una gif sar\u00e0 &#8220;image\/gif&#8221; e cos\u00ec via.<br \/>\nIl metodo newImage.Save() permette di inviare l&#8217;immagine sullo stream.<\/span><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">\u00a0<\/span><\/p>\n<p><span style=\"font-family: arial,helvetica,sans-serif;\">Bene, direi che potrebbe essere tutto. per testare la thumbnail.aspx copiatela nel vs sito (ovviamente IIS\/Microsoft), e chiamatela !!! Spero di esser stato utile\u00a0a qualcuno :-). Buon divertimento.<\/span><span style=\"font-family: arial,helvetica,sans-serif;\">\u00a0<\/span><span style=\"font-family: arial,helvetica,sans-serif;\">\u00a0<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ridimensionare un&#8217;immagine al volo (on the fly) con asp.net <a href=\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html\">Continua a leggere<span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[21],"tags":[28,27,29,31,23,30,25,24,26,22],"class_list":["post-57","post","type-post","status-publish","format-standard","hentry","category-net","tag-apsx","tag-asp-net","tag-bitmap","tag-c","tag-getthumbnailimage","tag-graphics","tag-outofmemory","tag-outofmemoryexception","tag-ridimensionare","tag-thumbnail"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Thumbnail &quot;al volo&quot; con .Net - Note book<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Thumbnail &quot;al volo&quot; con .Net - Note book\" \/>\n<meta property=\"og:description\" content=\"Ridimensionare un&#039;immagine al volo (on the fly) con asp.net Continua a leggere&rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html\" \/>\n<meta property=\"og:site_name\" content=\"Note book\" \/>\n<meta property=\"article:published_time\" content=\"2010-12-01T16:45:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2010-12-01T17:18:27+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.ilcercacasa.org\/public\/thumb\/thumbnail.aspx?FN=\/public\/images\/gundam.jpg&amp;MH=150\" \/>\n<meta name=\"author\" content=\"Andrea\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrea\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html\"},\"author\":{\"name\":\"Andrea\",\"@id\":\"https:\/\/www.andreazin.it\/solutions\/#\/schema\/person\/e47a2b851307c3b969373910264a37ef\"},\"headline\":\"Thumbnail &#8220;al volo&#8221; con .Net\",\"datePublished\":\"2010-12-01T16:45:45+00:00\",\"dateModified\":\"2010-12-01T17:18:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html\"},\"wordCount\":1178,\"commentCount\":1,\"image\":{\"@id\":\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html#primaryimage\"},\"thumbnailUrl\":\"http:\/\/www.ilcercacasa.org\/public\/thumb\/thumbnail.aspx?FN=\/public\/images\/gundam.jpg&amp;MH=150\",\"keywords\":[\"apsx\",\"ASP.net\",\"Bitmap\",\"C#\",\"GetThumbnailImage\",\"Graphics\",\"OutOfMemory\",\"OutOfMemoryException\",\"Ridimensionare\",\"Thumbnail\"],\"articleSection\":[\".Net\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html\",\"url\":\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html\",\"name\":\"Thumbnail \\\"al volo\\\" con .Net - Note book\",\"isPartOf\":{\"@id\":\"https:\/\/www.andreazin.it\/solutions\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html#primaryimage\"},\"thumbnailUrl\":\"http:\/\/www.ilcercacasa.org\/public\/thumb\/thumbnail.aspx?FN=\/public\/images\/gundam.jpg&amp;MH=150\",\"datePublished\":\"2010-12-01T16:45:45+00:00\",\"dateModified\":\"2010-12-01T17:18:27+00:00\",\"author\":{\"@id\":\"https:\/\/www.andreazin.it\/solutions\/#\/schema\/person\/e47a2b851307c3b969373910264a37ef\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html#primaryimage\",\"url\":\"http:\/\/www.ilcercacasa.org\/public\/thumb\/thumbnail.aspx?FN=\/public\/images\/gundam.jpg&amp;MH=150\",\"contentUrl\":\"http:\/\/www.ilcercacasa.org\/public\/thumb\/thumbnail.aspx?FN=\/public\/images\/gundam.jpg&amp;MH=150\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.andreazin.it\/solutions\/#website\",\"url\":\"https:\/\/www.andreazin.it\/solutions\/\",\"name\":\"Note book\",\"description\":\"Appunti di un ICT Manager\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.andreazin.it\/solutions\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.andreazin.it\/solutions\/#\/schema\/person\/e47a2b851307c3b969373910264a37ef\",\"name\":\"Andrea\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.andreazin.it\/solutions\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/14d0a0eb9347c19954bb41ace85b9bbe1cc906c8bf44a99f75896df0e81d154a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/14d0a0eb9347c19954bb41ace85b9bbe1cc906c8bf44a99f75896df0e81d154a?s=96&d=mm&r=g\",\"caption\":\"Andrea\"},\"sameAs\":[\"http:\/\/www.andreazin.it\"],\"url\":\"https:\/\/www.andreazin.it\/solutions\/author\/administrator\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Thumbnail \"al volo\" con .Net - Note book","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html","og_locale":"it_IT","og_type":"article","og_title":"Thumbnail \"al volo\" con .Net - Note book","og_description":"Ridimensionare un'immagine al volo (on the fly) con asp.net Continua a leggere&rarr;","og_url":"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html","og_site_name":"Note book","article_published_time":"2010-12-01T16:45:45+00:00","article_modified_time":"2010-12-01T17:18:27+00:00","og_image":[{"url":"http:\/\/www.ilcercacasa.org\/public\/thumb\/thumbnail.aspx?FN=\/public\/images\/gundam.jpg&amp;MH=150","type":"","width":"","height":""}],"author":"Andrea","twitter_misc":{"Scritto da":"Andrea","Tempo di lettura stimato":"7 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html#article","isPartOf":{"@id":"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html"},"author":{"name":"Andrea","@id":"https:\/\/www.andreazin.it\/solutions\/#\/schema\/person\/e47a2b851307c3b969373910264a37ef"},"headline":"Thumbnail &#8220;al volo&#8221; con .Net","datePublished":"2010-12-01T16:45:45+00:00","dateModified":"2010-12-01T17:18:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html"},"wordCount":1178,"commentCount":1,"image":{"@id":"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html#primaryimage"},"thumbnailUrl":"http:\/\/www.ilcercacasa.org\/public\/thumb\/thumbnail.aspx?FN=\/public\/images\/gundam.jpg&amp;MH=150","keywords":["apsx","ASP.net","Bitmap","C#","GetThumbnailImage","Graphics","OutOfMemory","OutOfMemoryException","Ridimensionare","Thumbnail"],"articleSection":[".Net"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html","url":"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html","name":"Thumbnail \"al volo\" con .Net - Note book","isPartOf":{"@id":"https:\/\/www.andreazin.it\/solutions\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html#primaryimage"},"image":{"@id":"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html#primaryimage"},"thumbnailUrl":"http:\/\/www.ilcercacasa.org\/public\/thumb\/thumbnail.aspx?FN=\/public\/images\/gundam.jpg&amp;MH=150","datePublished":"2010-12-01T16:45:45+00:00","dateModified":"2010-12-01T17:18:27+00:00","author":{"@id":"https:\/\/www.andreazin.it\/solutions\/#\/schema\/person\/e47a2b851307c3b969373910264a37ef"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.andreazin.it\/solutions\/thumbnail-al-volo-con-net.html#primaryimage","url":"http:\/\/www.ilcercacasa.org\/public\/thumb\/thumbnail.aspx?FN=\/public\/images\/gundam.jpg&amp;MH=150","contentUrl":"http:\/\/www.ilcercacasa.org\/public\/thumb\/thumbnail.aspx?FN=\/public\/images\/gundam.jpg&amp;MH=150"},{"@type":"WebSite","@id":"https:\/\/www.andreazin.it\/solutions\/#website","url":"https:\/\/www.andreazin.it\/solutions\/","name":"Note book","description":"Appunti di un ICT Manager","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.andreazin.it\/solutions\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/www.andreazin.it\/solutions\/#\/schema\/person\/e47a2b851307c3b969373910264a37ef","name":"Andrea","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.andreazin.it\/solutions\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/14d0a0eb9347c19954bb41ace85b9bbe1cc906c8bf44a99f75896df0e81d154a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/14d0a0eb9347c19954bb41ace85b9bbe1cc906c8bf44a99f75896df0e81d154a?s=96&d=mm&r=g","caption":"Andrea"},"sameAs":["http:\/\/www.andreazin.it"],"url":"https:\/\/www.andreazin.it\/solutions\/author\/administrator"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6bwSK-V","_links":{"self":[{"href":"https:\/\/www.andreazin.it\/solutions\/wp-json\/wp\/v2\/posts\/57","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.andreazin.it\/solutions\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.andreazin.it\/solutions\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.andreazin.it\/solutions\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.andreazin.it\/solutions\/wp-json\/wp\/v2\/comments?post=57"}],"version-history":[{"count":49,"href":"https:\/\/www.andreazin.it\/solutions\/wp-json\/wp\/v2\/posts\/57\/revisions"}],"predecessor-version":[{"id":102,"href":"https:\/\/www.andreazin.it\/solutions\/wp-json\/wp\/v2\/posts\/57\/revisions\/102"}],"wp:attachment":[{"href":"https:\/\/www.andreazin.it\/solutions\/wp-json\/wp\/v2\/media?parent=57"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.andreazin.it\/solutions\/wp-json\/wp\/v2\/categories?post=57"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.andreazin.it\/solutions\/wp-json\/wp\/v2\/tags?post=57"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}