{"id":1450,"date":"2012-09-20T06:30:56","date_gmt":"2012-09-20T04:30:56","guid":{"rendered":"http:\/\/www.manuelmarangoni.it\/sir-bit\/?p=1450"},"modified":"2016-02-12T12:13:22","modified_gmt":"2016-02-12T11:13:22","slug":"php-ridimensionare-le-immagini-con-smartimage","status":"publish","type":"post","link":"https:\/\/www.manuelmarangoni.it\/sir-bit\/1450\/php-ridimensionare-le-immagini-con-smartimage\/","title":{"rendered":"PHP &#8211; Ridimensionare le immagini con SmartImage"},"content":{"rendered":"<p>Le immagini sono un elemento fondamentale del layout di un sito. Su questo non ci sono dubbi.<br \/>\nFinch\u00e9 dobbiamo gestirle noi, in qualit\u00e0 di programmatori, i problemi si riducono al minimo: creiamo le immagini, le ritagliamo come si deve e le mettiamo online.<\/p>\n<p>Ma cosa fare quando l&#8217;upload delle immagini \u00e8 lasciato all&#8217;utente e <strong>si ha la necessit\u00e0 di ridimensionarle al volo<\/strong>?<br \/>\nVi sar\u00e0 capitato centinaia di volte di spiegare all&#8217;utente che le immagini vanno caricate \u00abentro una certa dimensione\u00bb e di ritrovarvi, poi, a gestire immagini sproporzionate.<br \/>\nFortunatamente esistono degli script gi\u00e0 pronti che si occupano per noi di questi problemi &#8211; e lo fanno in modo eccellente, lasciandoci una buona libert\u00e0 di azione e di personalizzazione. Sto parlando nello specifico di <em>SmartImage<\/em>, una classe integrabile nei nostri siti internet.<\/p>\n<p>La sua gestione non \u00e8 proprio immediata, ma \u00e8 solo questione di prenderci le misure. Ne faccio uso da diverso tempo e, ve l&#8217;assicuro, una volta capito il meccanismo non vorrete pi\u00f9 abbandonarla.<br \/>\n<strong><em>SmartImage<\/em> \u00e8 scaricabile gratuitamente online<\/strong> (per esempio a <a title=\"Pagina di download dell'ultima versione di SmartImage\" href=\"http:\/\/www.codicefacile.it\/smartimage\/download_smartimage.php\" target=\"_blank\">questo indirizzo<\/a>). Troverete comunque la classe completa nel file zip qui sotto, nel quale avrete a disposizione tra l&#8217;altro un esempio di utilizzo.<\/p>\n<p>In un <a title=\"PHP \u2013 Ritagliare immagini su misura con SmartImage | Sir Bit\" href=\"https:\/\/www.manuelmarangoni.it\/sir-bit\/?p=1458\">altro articolo<\/a> faremo un passo avanti e vedremo come ritagliare delle immagini su misura (sempre con SmartImage).<\/p>\n<p>Scaricatevi lo zip, quindi procedete con la lettura. Vediamo qualche operazione elementare, e cio\u00e8 come ridimensionare al volo un&#8217;immagine di cui si \u00e8 fatto l&#8217;upload.<br \/>\nLa versione a cui faccio riferimento \u00e8 <em>SmartImage 0.8.9<\/em>. Al momento la classe \u00e8 arrivata alla versione 0.9.6, ma le funzionalit\u00e0 di base restano le stesse.<br \/>\n<!--more--><\/p>\n\n        <h2>Download script<\/h2>\n        <div style=\"float:left; width:100%; margin-top:60px; margin-bottom:40px;\">\n        <div style=\"float:left; width:100px;\"><img decoding=\"async\" title=\"[PHP] Ridimensionare immagini con SmartImage\" src=\"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-content\/themes\/sirbit\/images\/redirect_icon.png\" alt=\"[PHP] Ridimensionare immagini con SmartImage\" \/><\/div>\n        <div style=\"float:left; width:350px; padding-top:30px; font-size:14px;\"><strong><a title=\"[PHP] Ridimensionare immagini con SmartImage\" href=\"https:\/\/www.manuelmarangoni.it\/sir-bit\/code\/php-ridimensionare-immagini-con-smartimage\/\">Pagina diretta alla scheda e al download del codice<\/a><\/strong><\/div>\n        <\/div>\n        <div style=\"clear:both;\"> <\/div>\n<h2>L&#8217;uso della classe: ritagliare con o senza proporzioni<\/h2>\n<p>Poniamo che l&#8217;utente abbia fatto l&#8217;upload di un&#8217;immagine da un form, usando un comune campo input di tipo &#8220;file&#8221;. Il suo nome, passato poi nel post, \u00e8 &#8220;foto&#8221;.<\/p>\n<p>I commenti dovrebbero essere abbastanza chiari da capire il procedimento.<br \/>\nIn parole brevi, creiamo l&#8217;oggetto <code>$img<\/code> con il quale potremmo richiamare le funzioni interne alla classe.<\/p>\n<p>La <strong>funzione <code>resize()<\/code> si occupa di ridimensionare<\/strong> l&#8217;immagine passata. Nella sua forma base vi basta inserire larghezza e altezza. Il terzo parametro (non obbligatorio) se impostato a &#8220;true&#8221; indica di ritagliare effettivamente l&#8217;immagine alle dimensioni impostate. Se invece \u00e8 impostata a &#8220;false&#8221; (o lasciato vuoto) ridimensiona l&#8217;immagine senza perdere informazioni..<\/p>\n<p>La <strong>funzione <code>saveImage()<\/code> specifica dove salvare<\/strong> la nuova immagine ridimensionata e con quale nome. Un eventuale secondo parametro permette di specificare la percentuale di risoluzione rispetto all&#8217;originale.<\/p>\n\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #990000;\">isset<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$_FILES<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'foto'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'name'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">)<\/span> and <span style=\"color: #000088;\">$_FILES<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'foto'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'name'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">!=<\/span><span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\r\n\t<span style=\"color: #b1b100;\">include<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\"SmartImage089\/SmartImage.class.php\"<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/importo la classe di smartimage<\/span>\r\n\t<span style=\"color: #000088;\">$upload_dir<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #0000ff;\">\"img\"<\/span><span style=\"color: #339933;\">;<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/cartella dove salvare le immagini<\/span>\r\n\r\n\t<span style=\"color: #666666; font-style: italic;\">\/\/tolgo dal nome file i caratteri non consentiti<\/span>\r\n\t<span style=\"color: #000088;\">$arr<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">array<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$arr<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #0000ff;\">\"'\"<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$arr<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #0000ff;\">\"<span style=\"color: #000099; font-weight: bold;\">\\\\<\/span>\"<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$file_name<\/span><span style=\"color: #339933;\">=.<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$arr<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #000088;\">$_FILES<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'foto'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'name'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$file_name<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #990000;\">str_replace<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">\".jpg\"<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #0000ff;\">\"\"<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #000088;\">$file_name<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t<span style=\"color: #666666; font-style: italic;\">\/\/Ridimensionare un'immagine mantenendo le proporzioni e ottimizzando la risoluzione all'85%<\/span>\r\n\t<span style=\"color: #000088;\">$img<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #000000; font-weight: bold;\">new<\/span> SmartImage<span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$_FILES<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"foto\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"tmp_name\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$img<\/span><span style=\"color: #339933;\">-&gt;<\/span><span style=\"color: #004000;\">resize<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #cc66cc;\">100<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #cc66cc;\">90<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$img<\/span><span style=\"color: #339933;\">-&gt;<\/span><span style=\"color: #004000;\">saveImage<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$upload_dir<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #0000ff;\">\"\/\"<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #000088;\">$file_name<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #0000ff;\">\"-proporzionata.jpg\"<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t<span style=\"color: #666666; font-style: italic;\">\/\/Esempio pi\u00f9 avanzato:<\/span>\r\n\t<span style=\"color: #666666; font-style: italic;\">\/\/ridimensionare un'immagine tagliandola alle dimensioni esatte (50x50 px) e ottimizzando la risoluzione all'85%<\/span>\r\n\t<span style=\"color: #000088;\">$img<\/span><span style=\"color: #339933;\">=<\/span><span style=\"color: #000000; font-weight: bold;\">new<\/span> SmartImage<span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$_FILES<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"foto\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">\"tmp_name\"<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$img<\/span><span style=\"color: #339933;\">-&gt;<\/span><span style=\"color: #004000;\">resize<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #cc66cc;\">50<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #cc66cc;\">50<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #009900; font-weight: bold;\">true<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #000088;\">$img<\/span><span style=\"color: #339933;\">-&gt;<\/span><span style=\"color: #004000;\">saveImage<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$upload_dir<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #0000ff;\">\"\/\"<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #000088;\">$file_name<\/span><span style=\"color: #339933;\">.<\/span><span style=\"color: #0000ff;\">\"-ritagliata.jpg\"<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #cc66cc;\">85<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\t\r\n\r\n<span style=\"color: #009900;\">}<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Adesso che avete a disposizioni le basi per l&#8217;uso di SmartImage, per esigenze pi\u00f9 specifiche potete dare un&#8217;occhiata <a title=\"PHP \u2013 Ritagliare immagini su misura con SmartImage | Sir Bit\" href=\"https:\/\/www.manuelmarangoni.it\/sir-bit\/?p=1458\">alla pagina<\/a> citata a inizio articolo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una classe in php che permette di gestire e ridimensionare le immagini in modo automatico. E&#8217; possibile scegliere se mantenere le proporzioni o ritagliarla.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[78],"tags":[4,43,6,25],"class_list":["post-1450","post","type-post","status-publish","format-standard","hentry","category-php-mysql","tag-php","tag-risorse","tag-script","tag-strumenti-per-web","cat-78-id"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/1450"}],"collection":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/comments?post=1450"}],"version-history":[{"count":12,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/1450\/revisions"}],"predecessor-version":[{"id":2398,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/1450\/revisions\/2398"}],"wp:attachment":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/media?parent=1450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/categories?post=1450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/tags?post=1450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}