/proc/sys/vm/drop_caches") $CONF['gall_wh_miniatura'] = false;//forza l'inserimento dimensioni con gall_skip_infos=true sulla miniatura (utile per gall_lazy) $CONF['gall_wh_ingrandimento'] = false;//forza l'inserimento dimensioni con gall_skip_infos=true sull'ingrandimento $CONF['gall_name_use_timestamp'] = false; $CONF['itemprop_image'] = false; $CONF['gall_lazy'] = false;//aggiunge loading="lazy" https://caniuse.com/#feat=loading-lazy-attr https://web.dev/native-lazy-loading/ if($CONF["indi_subversion"] > 3) $CONF["gall_link_assoluto"] = "SI"; // il link all' immagine e' sempre assoluto else $CONF["gall_link_assoluto"] = "NO"; //tenere in sync con maxSize dell'editor immagini admin_tnx (fileRenderer in cotto.php) EDIT 2020: non c'è più $CONF["loc"]["img_fix"] = "1800"; $CONF["rem"]["img_fix"] = "NO"; $CONF["gall_webp"] = !$_GET['nowebp'] && strpos($_SERVER['HTTP_ACCEPT'], "image/webp") !== false; // $CONF["gall_webp"] = false; if($CONF["indi_subversion"] > 5) { $CONF["loc"]["img_fix"] = "2500"; $CONF["rem"]["img_fix"] = "2500"; } /* if($CONF["indi_subversion"] > 4) $CONF["gall_agg"] = "border=\"0\""; //parametri aggiuntivi nel tag img else $CONF["gall_agg"] = ""; //parametri aggiuntivi nel tag img */ $CONF["gall_agg"] = ""; //parametri aggiuntivi nel tag img $CONF["gall_class"] = NULL; //classe immagine $CONF["gall_gruppo"] = NULL; //rel=lighbox[gruppo] $CONF["gall_gruppo2"] = NULL; //rel=lighbox_gruppo //galleria a DIRECTORY $CONF["gall_dir"] = NULL; //directory per galleria automatica con slash finale //colonne if($CONF["indi_subversion"] > 5) $CONF["gall_dir_colonne"] = 0; //numero di colonne della galleria, se metto 0 cambia e usa il template con i div else $CONF["gall_dir_colonne"] = "4"; $CONF["gall_dir_sort"] = "natsort"; // ordinamento: natsort(def) | filesystem | random | mt_random (vero random) | date_asc | date_desc $CONF["gall_dir_class"] = "galleria"; //classe tabella galleria $CONF["gall_dir_nome"] = "NO"; //non mette il nome del file un po sistemato $CONF["gall_dir_tpl_nome"] = "[gall_dir_file_pulito|e] "; //variabile $CONF["gall_dir_tpl_alt"] = "[gall_dir_file_pulito|e]"; //attr alt $CONF["gall_dir_tpl_desc"] = "[gall_dir_file_pulito|e]"; //attr title $CONF["gall_dir_filtro"] = NULL; //filtraggio sul nome del file $CONF["gall_dir_escludi"] = NULL; //array di nomi di file da escludere dal gall_dir $CONF["gall_dir_file"] = NULL; //variabile di template con il nome del file $CONF["gall_dir_pulito"] = NULL; //variabile di template con il nome del file ripulito $CONF["gall_dir_limit"] = NULL; //ritorna solo un numero limitato di risultati //title del link all' ingrandimento $CONF["gall_title"] = NULL; //attributo alt miniatura $CONF["gall_alt"] = NULL; //riferimento aggiuntivo per creare ilnome random dell' immagine, se lo imposto diverso per //la stessa immagine crea due file con nomi diversi $CONF["gall_imgref"] = "0"; //pagina definita in indi dove si ingrandiscono le immagini //qualita delle imamgini jpg $CONF["gall_q_grande"] = "80"; $CONF["gall_q_miniatura"] = "80"; //dimensione miniatura se non c'e' il bordo che la definisce $CONF["gall_min_h"] = "100"; $CONF["gall_min_w"] = "140"; //immagine bianco / nero che imposta la dimensione e l'alpha della miniatura //$CONF[gall_maschera] = "maschera.png"; //immagine che imposta la dimensione e il bordo della miniatura //$CONF[gall_bordo] = "indi/bordo_140_93.png"; //Dimensione immagine grande $CONF["gall_max_h"] = "590"; $CONF["gall_max_w"] = "750"; //per decentrare il crop delle miniature, ad esempio -50 per spostare più in basso una foto...ciauz(cecca) //esteso anche senza il crop (damiano) $CONF["gall_xoffset"] = 0; $CONF["gall_yoffset"] = 0; $CONF["gall_min_force_x"] = "NO"; $CONF["gall_min_force_y"] = "NO"; //----------------------- png 24 bordo miniatura, //immagine che imposta la dimensione e il bordo della miniatura //$CONF[gall_bordo] = "_pics/bordo_xxxxx.png"; //----------------------- png 24 scritta/watemark su ingrandimento / miniatura $CONF["gall_scritta"] = NULL; //margine scritta dal bordo $CONF["gall_margine"] = "10"; //posizione scritta in altezza (alto|basso|centro) $CONF["gall_posh"] = "basso"; //posizione scritta in altezza (sinistra|centro|destra) $CONF["gall_posw"] = "destra"; $CONF["gall_min_scritta"] = NULL; $CONF["gall_min_scritta_margine"] = "10"; $CONF["gall_min_scritta_posh"] = "centro"; $CONF["gall_min_scritta_posw"] = "centro"; //imposta la dimensione dell'immagine sorgente a 1200x1200 e qualità quasi massima 98% $CONF["img_fix_name"] = "NO"; //per semplificare il nome del file (NON ATTIVARE SE LE IMMAGNI VENGONO DAL DB!!!!!) //aggiunge cambia le dimensioni della finestra di pop-up dei valori specificati $CONF["gall_popup_add_w"] = "0"; $CONF["gall_popup_add_h"] = "0"; //------------ opzioni DEPRECATE ------------------- // FUNZIONI POUP $CONF["popup_link"] = "NULL"; //Valore di default del link del popup, deve esserci $CONF["popup_img"] = "NULL"; $CONF["popup_pagina"] = "popup"; //nome della pagina di default dei popup $CONF["popup_tipo"] = "CENTRATO"; //CENTRATO / STANDARD $CONF["popup_width"] = "500"; $CONF["popup_height"] = "450"; $CONF["popup_opzioni"] = "toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no"; $CONF["popup_multifinestra"] = "SI"; $CONF["popup_img_error"] = "IMAGE NOT FOUND"; //opzioni popup sia gall che altre //PAGINA apre il popup in una pagina $CONF["gall_multifinestra"] = "SI"; //le popup si aprono ognuna in una fin diversa oppure nella solita // TESTI MINIATURA (ALT) $CONF["xxx"]["gall_txt_miniatura"] = "Click to enlarge"; $CONF["ita"]["gall_txt_miniatura"] = "Clicca per Ingrandire"; $CONF["ger"]["gall_txt_miniatura"] = "Klicken Sie, um zu vergrößern"; $CONF["fra"]["gall_txt_miniatura"] = "Cliquetez pour agrandir"; $CONF["spa"]["gall_txt_miniatura"] = "Chasque para agrandar"; //TESTI INGRANDIMENTO (ALT INGRANDIMENTO) $CONF["xxx"]["gall_txt_ingrandimento"] = "Click to close the window"; $CONF["ita"]["gall_txt_ingrandimento"] = "Clicca per chiudere la finestra"; $CONF["ger"]["gall_txt_ingrandimento"] = "Klicken zum Schließen des Fensters"; $CONF["fra"]["gall_txt_ingrandimento"] = "Déclic pour fermer la fenêtre"; $CONF["spa"]["gall_txt_ingrandimento"] = "Tecleo para cerrar la ventana"; //TESTI INGRANDIMENTO $CONF["xxx"]["gall_txt_lightbox"] = 'Press to close'; $CONF["ita"]["gall_txt_lightbox"] = 'Premi per chiudere'; $CONF["ger"]["gall_txt_lightbox"] = 'Press X to close'; $CONF["fra"]["gall_txt_lightbox"] = 'Press X to close'; $CONF["spa"]["gall_txt_lightbox"] = 'Press X to close'; //controlla se il file e' un immagine (png,jpg,gif) function gall_is_image($path) { $a = getimagesize($path); $image_type = $a[2]; if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG))) { return true; } return false; } function gall_fancybox($immagini, $triggerJQuerySelector, $gallOpt = array(), $fancyboxOpt = array()){ if(indi_device()->isMobile()) $GLOBALS['DATI']['file:_libs/fancybox2/fix_apertura_diretta_safari_mobile.css'] = 'CDN,BODY,VIS'; foreach($immagini as $k=>$i){ $immagini[$k] = array('href' => gall(array_merge(array("gall_tipo" => "NOING", "gall_return" => "PATH", "gall_img" => $i['path_indi']), $gallOpt))); } $GLOBALS['DATI']['body:$("'.$triggerJQuerySelector.'").click(function(e){e.preventDefault();$.fancybox('.json_encode($immagini).','.json_encode($fancyboxOpt).');});'] = 'PRE_CLOSE,JS'; } //torna le informazioni di un immagine e controlla se il file e' un immagine (png,jpg,gif) function gall_info_image($path) { $a = getimagesize($path); $image_type = $a[2]; if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG))) { return $a; } return false; } //torna solo il nome del file function gall_pulisci_nome ($nome) { if($GLOBALS[CONF]["indi_subversion"] < 1) { return str_replace("_"," ",substr($nome,0,strpos($nome,"."))); } else { //in base alla lingua prende il nome giusto separato da separatore //return $nome; if(strrpos($nome,"/")) $nome = substr($nome,strrpos($nome,"/")+1,strlen($nome)); return str_replace("_"," ",substr($nome,0,strpos($nome,"."))); } } //estrae una didascalia dal nome del file tipo 1-Descrizione immagine function gall_pulisci_nome_new ($nome,$separatore="-") { if(strrpos($nome,$separatore)) $nome = substr($nome,strrpos($nome,$separatore)+1,strlen($nome)); return str_replace("_"," ",substr($nome,0,strpos($nome,"."))); } //NON USATA PIU //La funzione di inizializzazione, server se voglio modificare i parametri globali e di altri moduli, in particolare l' array dati, cosa che viene comunque gia' fatta in automatico function gall_init() { global $CONF, $DATI; $lang = $DATI["lang"]; //mi fermo se ho gia inizializzato if($CONF["gall_init"] == "SI") { return FALSE; } //inizializzo if($GLOBALS["CONF"]["DEBUG"] == "SI") d_info("Inizializzo Galleria","mod_galleria","INDI"); //$DATI = array_merge($CONF, $CONF["xxx"], $CONF[$lang], $DATI); $CONF["gall_init"] = "SI"; } function gall_get_imgref($CONF){ $imgref = $CONF["gall_crop"] . "|" . $CONF["gall_q_grande"] . "|" . $CONF["gall_q_miniatura"] . "|" . $CONF["gall_min_h"] . "|" . $CONF["gall_min_w"] . "|" . $CONF["gall_max_h"] . "|" . $CONF["gall_max_w"] . "|" . $CONF["gall_margine"] . "|" . $CONF["gall_posh"] . "|" . $CONF["gall_posw"] . "|" . $CONF["gall_bordo"] . "|" . $CONF["gall_scritta"]; if($CONF["gall_min_scritta"] != '') $imgref .= $CONF["gall_min_scritta"]."|"; if($CONF["gall_crop_max"] != 'NO') $imgref .= $CONF["gall_crop_max"] . "gall_crop_max|"; if($CONF["gall_min_force_x"] != 'NO') $imgref .= $CONF["gall_min_force_x"] . "gall_min_force_x|"; if($CONF["gall_min_force_y"] != 'NO') $imgref .= $CONF["gall_min_force_y"] . "gall_min_force_y|"; if($CONF["gall_xoffset"]) $imgref .= "|gall_xoffset" .$CONF["gall_xoffset"]; if($CONF["gall_yoffset"]) $imgref .= "|gall_yoffset" .$CONF["gall_yoffset"]; if($CONF["gall_resize_furbo"] != 'NO') $imgref .= "|gall_resize_furbo" .$CONF["gall_resize_furbo"]; if($CONF["gall_resize_furbo_min"]) $imgref .= "|gall_resize_furbo_min" .$CONF["gall_resize_furbo_min"]; if($CONF["gall_fill"]) $imgref .= "|gall_fill" .$CONF["gall_fill"]; if($CONF["gall_fill_color"]) $imgref .= "|gall_fill_color" .$CONF["gall_fill_color"]; if($CONF["gall_fill_alpha"]) $imgref .= "|gall_fill_alpha" . ($CONF["gall_fill_alpha"] === "AUTO" ? "AUTO" : ($CONF["gall_fill_alpha"] ? "S" : "N")); if($CONF["gall_pngquant"]) $imgref .= "|gall_pngquant" .$CONF["gall_pngquant"]; if($CONF["gall_maschera"]) $imgref .= "|gall_maschera" .$CONF["gall_maschera"]; if($CONF["gall_auto_rotate"] != 'NO') $imgref .= "|gall_auto_rotate" .$CONF["gall_auto_rotate"]; if ($CONF["gall_crop_posizione"] != "centro") { //per non far rifare tutte le miniature ignoro il parametro standard centro $imgref .= "|gall_crop_posizione" .$CONF["gall_crop_posizione"]; } if(($CONF["gall_min_scritta"] || $CONF["gall_scritta"]) && substr($CONF["gall_img"], -4) == ".png"){ //se l'immagine originale era una png poteva venire lo sfondo della scritta bianco invece che trasparente $imgref .= "|fix_gall_scritta"; } //d_info("Generato IMGREF della galleria => ".$imgref,"mod_galleria","INDI"); return $imgref; } function popup_init() { gall_init(); } //########################################################################## //################ FUNZIONI GALLERIA AMM ######################### //########################################################################## //print "ADMIN_IMG"; //img_admin(); //??? non usato function img_admin() { global $DATI; if($_GET["img_admin"] == "SI" and $_GET[id] != "" and $_GET["key"] != "") { //cancello l' immagine $IMM = imm_genera_nome($_GET[id],$_GET["key"]); @unlink($IMM["nome"]); @unlink($IMM["nome_t"]); //print d($IMM); } } //??? non usato function gall_admin($img,$parola) { global $DATI; if($_GET["img_admin"] == "SI") { print "Aggiorna"; } if($_GET["img_admin"] == "SI" and $_GET[id] != "" and $_GET[key] != "") { //cancello l' immagine $IMM = imm_genera_nome($img,$_GET[key]); @unlink($IMM["nome"]); @unlink($IMM["nome_t"]); //print d($IMM); } } //########################################################################## //################ FUNZIONI POPUP ################################ //########################################################################## function popup_pagina($pagina,$width=NULL,$height=NULL,$opzioni=NULL) { if(is_array($pagina)) return popup_a(genera_link($pagina[0], $pagina[1], $pagina[2], $pagina[3]),$width,$height,$opzioni); else return popup_a(genera_link($pagina),$width,$height,$opzioni); } function popup_a($PARAM=NULL,$width=NULL,$height=NULL,$opzioni=NULL) { //popup_init(); global $MENU,$DATI,$CONF; //due tipi di parametri semplici e completi if(is_array($PARAM)) $CONFIGURAZIONE = $PARAM; else { if($PARAM != NULL) $CONFIGURAZIONE["popup_link"] = $PARAM; else $PARAM = $CONFIGURAZIONE["popup_link"]; } $CONFIGURAZIONE = array_merge($DATI,$CONFIGURAZIONE); //d($CONFIGURAZIONE); //if($CONFIGURAZIONE["popup_tipo"] == "CENTRATO") gall_javascipt_popup(); if($width == NULL) $width = $CONFIGURAZIONE["popup_width"]; if($height == NULL) $height = $CONFIGURAZIONE["popup_height"]; if($opzioni != NULL) $CONFIGURAZIONE["popup_opzioni"] = $opzioni; if($CONFIGURAZIONE["popup_tipo"] == "STANDARD") return ('javascript:OnClick=window.open(\''.$CONFIGURAZIONE["popup_link"].'\',\''.popup_titolo().'\',\'width='.$width.',height='.$height.'\',\''.$CONFIGURAZIONE["popup_opzioni"].'\');'); if($CONFIGURAZIONE["popup_tipo"] == "CENTRATO") return ('javascript:OnClick=popc(\''.$CONFIGURAZIONE["popup_link"].'\',\''.popup_titolo().'\',\''.$width.'\',\''.$height.'\',\''.$CONFIGURAZIONE["popup_opzioni"].'\');'); } function popup_img($PARAM=NULL,$width=NULL,$height=NULL,$opzioni=NULL) { //popup_init(); global $MENU,$DATI,$CONF; //due tipi di parametri semplici e completi if(is_array($PARAM)) $CONFIGURAZIONE = $PARAM; else { if($PARAM != NULL) $CONFIGURAZIONE["popup_img"] = $PARAM; else $PARAM = $CONFIGURAZIONE["popup_img"]; } $CONFIGURAZIONE = array_merge($DATI,$CONFIGURAZIONE); //if($CONFIGURAZIONE["popup_tipo"] == "CENTRATO") gall_javascipt_popup(); //trovo il link $CONFIGURAZIONE["popup_link"] = genera_link($CONFIGURAZIONE["popup_pagina"],$CONFIGURAZIONE["lang"],array("img" => indi_urlencode($CONFIGURAZIONE["popup_img"]))); //dimensione finestra come dimensione immagine $dim_tmp = @getimagesize($CONFIGURAZIONE["popup_img"]); if($width == 0) $width = $dim_tmp["0"]; if($height == 0) $height = $dim_tmp["1"]; if($opzioni != NULL) $CONFIGURAZIONE["popup_opzioni"] = $opzioni; if($CONFIGURAZIONE["popup_tipo"] == "STANDARD") return ('javascript:OnClick=window.open(\''.$CONFIGURAZIONE["popup_link"].'\',\''.popup_titolo().'\',\'width='.$width.',height='.$height.'\',\''.$CONFIGURAZIONE["popup_opzioni"].'\');'); if($CONFIGURAZIONE["popup_tipo"] == "CENTRATO") return ('javascript:OnClick=popc(\''.$CONFIGURAZIONE["popup_link"].'\',\''.popup_titolo().'\',\''.$width.'\',\''.$height.'\',\''.$CONFIGURAZIONE["popup_opzioni"].'\');'); } function popup_img_visualizza() { //popup_init(); global $DATI; //CODICE X TEMPLATE POPUP //Stampa il link con l' immagine $out .= ''; $alt2=encode($DATI["gall_txt_ingrandimento"]); $img = $_GET["img"]; if(is_file($img)) $out .= ''.$alt2.''; else $out .= $DATI["popup_img_error"]; $out .= ''; return $out; } function popup_vis_generica() { //popup_init(); global $DATI; //CODICE X TEMPLATE POPUP //Stampa il link con l' immagine $img = gpc_url($_GET["img"]); if(is_file($img)) { $out .= '
'; $alt2=encode($DATI["gall_txt_ingrandimento"]); $out .= ''.$alt2.''; $out .= '
'; return $out; } else { d_err("ERRORE popup_vis_generica: $img (non esiste)"); //indi_debug_email("damiano@tnx.it"); //if($DATI[pagina_inc] != $DATI[pagina_def]) include($DATI[pagina_inc]); } } //########################################################################## //################ FUNZIONI GALLERIA ############################# //########################################################################## //genera codice per visualizzare l' immagine per la funzione gall, va' messa nel template della galleria function gall_visualizza_immagine() { //gall_init(); global $DATI; //CODICE X TEMPLATE GALLERIA //Stampa il link con l' immagine $out .= ''; $alt2=encode($DATI["gall_txt_ingrandimento"]); //$NOME = gall_nome($_GET["img"],$_GET["imgref"]); //$NOME = $_GET["img"]; //$img1 = $NOME["nome"]; if($GLOBALS["DATI"]["cdn_static_active"] == "SI") { $baseurl = cdn_baseurl_static(); } else { $baseurl = $DATI['baseurl']; } $img2 = $baseurl.gpc_url($_GET["img"]); //if(is_file($img1)) $out .= ''.$alt2.''; $out .= ''; return $out; } function gall_visualizza_immagine_pagina() { //gall_init(); global $DATI; //CODICE X TEMPLATE GALLERIA //Stampa il link con l' immagine $img2 = $DATI["path_rel"].$_GET["img"]; $out .= '

'.$alt2.'

'; return $out; } // funzione per centrare il popup function gall_javascipt_popup() { global $DATI; //imposto che c'e' il popup in questa pagina if ($DATI["gal_popup"] != "SI") { //imposto che ho messo il javascript $DATI["gal_popup"] = "SI"; //metto il javascript $codice = " function popc(nome, titolo, lar, alt, feat){ var wwdt = screen.width; var hhgt = screen.height; var x = Math.round( (wwdt / 2) - (lar / 2) ); var y = Math.round( (hhgt / 2) - (alt / 2) ); window.open(nome, titolo, 'width=' + lar + ',height=' + alt + ',left=' + x + ',screenX=' + x + ',top=' + y + ',screenY=' + y + ',' + feat); }"; //metto il codice javascript($codice); } } //gnerica function gall_titolo() { global $DATI; if($DATI["gall_multifinestra"] == "SI") return (mt_rand(1,100000)); else return("GALL"); } function popup_titolo() { //popup_init(); global $DATI; if($DATI["popup_multifinestra"] == "SI") return (mt_rand(1,100000)); else return("POPUP"); } //funzione per galleria //imm e la funzione di generazione delle immagini, gli va' passata anche la parola eventualmente function gall_bordo($img=NULL,$img_box=NULL) { $CONFIGURAZIONE["gall_img"] = $img; $CONFIGURAZIONE["gall_bordo"] = $img_box; return gall($CONFIGURAZIONE); } //Miniatura ottimizzata per il database //da spostare in modulo jetbox quando pronto function gall_procat($ARR) { } //galleria di un intera cartella function gall_dir($ARR) { if(is_array($ARR)) $CONFIGURAZIONE = $ARR; else { //posso passare direttamente la cartella $CONFIGURAZIONE["gall_dir"] = $ARR; } $IMMAGINI = array(); //faccio il merge e metto i dati di default se presenti $CONFIGURAZIONE = array_merge($GLOBALS["DATI"],$CONFIGURAZIONE); if(substr($CONFIGURAZIONE["gall_dir"], -1) != '/') $CONFIGURAZIONE["gall_dir"].='/'; //mettere log se non ci sono immagini if(is_dir($CONFIGURAZIONE["gall_dir"])) { $handle = opendir($CONFIGURAZIONE["gall_dir"]); while (false !== ($file = readdir($handle))) { if($file != "." and $file != ".." and (stristr($file,"jpg") or stristr($file,"jpeg") or stristr($file,"gif") or stristr($file,"png"))) { if($CONFIGURAZIONE["gall_dir_filtro"]) { if(stristr($file,$CONFIGURAZIONE["gall_dir_filtro"])) $IMMAGINI[] = $file; } else if($CONFIGURAZIONE["gall_dir_escludi"]) { if(!in_array($file, $CONFIGURAZIONE["gall_dir_escludi"])) $IMMAGINI[] = $file; } else{ $IMMAGINI[] = $file; } if($CONFIGURAZIONE["gall_dir_limit"]) { if(count($IMMAGINI) >= $CONFIGURAZIONE["gall_dir_limit"]) break; } } } closedir($handle); } else { d_err("ERRORE gall_dir($CONFIGURAZIONE[gall_dir]) non è una directory!","mod_galleria","INDI"); return false; } //ordinamento if($CONFIGURAZIONE["gall_dir_sort"] == "natsort") @natsort($IMMAGINI); elseif($CONFIGURAZIONE["gall_dir_sort"] == "random")@shuffle($IMMAGINI); elseif($CONFIGURAZIONE["gall_dir_sort"] == "random_mt"){ $IMMAGINI = indi_mt_shuffle($IMMAGINI); } //ordinamento per data elseif($CONFIGURAZIONE["gall_dir_sort"] == "date_asc" or $CONFIGURAZIONE["gall_dir_sort"] == "date_desc"){ foreach($IMMAGINI as $immagine) { $tmp[$immagine] = filemtime($CONFIGURAZIONE["gall_dir"].$immagine); } if($CONFIGURAZIONE["gall_dir_sort"] == "date_asc") asort($tmp); if($CONFIGURAZIONE["gall_dir_sort"] == "date_desc") arsort($tmp); $IMMAGINI = array_keys($tmp); } //dati ciclo $CTOT = $CONFIGURAZIONE["gall_dir_num"] ? $CONFIGURAZIONE["gall_dir_num"] : count($IMMAGINI); $C = 0; reset($IMMAGINI); while((list($k, $v)=@each($IMMAGINI)) && ($C < $CTOT)) { $CONFIGURAZIONE['gall_img'] = $CONFIGURAZIONE["gall_dir"].$v; $CONFIGURAZIONE['gall_dir_file'] = $v; //dati ciclo if($CONFIGURAZIONE["gall_dir_nome"] == "SI") { //NOME if($CONFIGURAZIONE["gall_dir_tpl_nome"] != "") { $tpl = ""; $tpl = $CONFIGURAZIONE["gall_dir_tpl_nome"]; $CONFIGURAZIONE['gall_dir_file_pulito'] = gall_pulisci_nome($v); $txt_nome = indi_tpl($tpl,$CONFIGURAZIONE,1,"Q"); } //ALT if($CONFIGURAZIONE["gall_dir_tpl_alt"] != "") { $CONFIGURAZIONE['gall_dir_file_pulito'] = gall_pulisci_nome($v); //imposto anche il nome della miniatura $CONFIGURAZIONE["gall_txt_miniatura"] = indi_tpl($CONFIGURAZIONE["gall_dir_tpl_alt"],$CONFIGURAZIONE,1,"Q"); } else { if($CONFIGURAZIONE["gall_dir_tpl_nome"] != "") $CONFIGURAZIONE["gall_txt_miniatura"] = $txt_nome; } //DESCRIZIONE if($CONFIGURAZIONE["gall_dir_tpl_desc"] != "") { $CONFIGURAZIONE['gall_dir_file_pulito'] = gall_pulisci_nome($v); //imposto anche il nome della miniatura $CONFIGURAZIONE["gall_title"] = indi_tpl($CONFIGURAZIONE["gall_dir_tpl_desc"],$CONFIGURAZIONE,1,"Q"); } else { if($CONFIGURAZIONE["gall_dir_tpl_nome"] != "") $CONFIGURAZIONE["gall_title"] = $txt_nome; } } if($CONFIGURAZIONE["gall_return"] == "ARRAY"){ $OUT[] = gall($CONFIGURAZIONE); } else{ //genero galleria $GALL = gall($CONFIGURAZIONE); //################## TEMPLATE VISUALIZZAZIONE ####################### if($CONFIGURAZIONE["gall_dir_colonne"] == 0) { if($C===0) $OUT .= "
\n"; $OUT .= "
".$GALL.""; if($CONFIGURAZIONE["gall_dir_tpl_nome"] != "" and $txt_nome != "") $OUT .= "

".$txt_nome."

"; $OUT .= "
\n"; if($C==$CTOT-1) $OUT .= "
\n"; } else { //TESTA if($C===0) { $OUT .= "\n"; } //CORPO if(1==1) { $OUT .= ""; if((($C+1)%$CONFIGURAZIONE["gall_dir_colonne"])==0) { $OUT .= "\n\n\n"; } } //CODA if($C==$CTOT-1) { $OUT .= "
"; $OUT .= $GALL; if($CONFIGURAZIONE["gall_dir_tpl_nome"] != "") $OUT .= "

".$txt_nome."

\n"; $OUT .= "
\n"; } } $C++; } } //################## FINE TEMPLATE ####################### return $OUT; } //DEPRECATA function gall_indi($CONF) { return gall(indi_set($CONF)); } //QUASI DEPRECATA lasciare function gall2($nome,$CONF) { $CONF["gall_img"] = $nome; return gall($CONF); } //galleria per specificare i testi, usata con lightbox function gall_txt($nome,$title=NULL,$alt=NULL,$alt_ing=NULL) { if($title != "" and $alt == "") $CONF["gall_txt_miniatura"] = $title; else $CONF["gall_txt_miniatura"] = $alt; //DA FINIRE ???? //if($title != "" and $alt_ing=NULL) $CONF["gall_txt_ingrandimento"] = $title; //else $CONF["gall_txt_ingrandimento"] = $alt_ing; $CONF["gall_title"] = $title; $CONF["gall_img"] = $nome; return gall($CONF); } //FUNZIONE PRINCIPALE function gall($PARAM=NULL,$tipo=NULL,$alt_param=NULL,$gall_imgref=NULL) { //cecca $kGall = (is_array($PARAM) ? $PARAM["gall_img"] : $PARAM) . "_" . md5(serialize($PARAM) . "|" . serialize($tipo) . "|" . serialize($alt_param) . "|" . serialize($gall_imgref)); return indiCache("GALL", $kGall, function() use ($PARAM,$tipo,$alt_param,$gall_imgref) { //gall_init(); global $INDI,$CONF, $DATI, $lang, $pagina, $PRESA; //in presa ho l' ultima parola presa if(is_array($PARAM)) $CONFIGURAZIONE = $PARAM; else { if($PARAM != NULL) $CONFIGURAZIONE["gall_img"] = $PARAM; if($tipo != NULL) $CONFIGURAZIONE["gall_tipo"] = $tipo; if($alt_param != NULL) $CONFIGURAZIONE["gall_txt_miniatura"] = $alt_param; if($gall_imgref != NULL) $CONFIGURAZIONE["gall_imgref"] = $gall_imgref; } //controllo gall_img se e' bono if(!$CONFIGURAZIONE["gall_img"] and $CONFIGURAZIONE["gall_img_alt"]) $CONFIGURAZIONE["gall_img"] = $CONFIGURAZIONE["gall_img_alt"]; if(!$CONFIGURAZIONE["gall_img"]) return NULL; //faccio il merge e metto i dati di default se presenti $CONFIGURAZIONE = array_merge($DATI,$CONFIGURAZIONE); $CONFIGURAZIONE["gall_imgref"] = gall_get_imgref($CONFIGURAZIONE); // print_r($CONFIGURAZIONE); //debug configurazione //d_info($CONFIGURAZIONE); //metto il javascript per centrare il popup ?? mettere opzione //if($CONFIGURAZIONE["gall_tipo"] != "NOING" AND $CONFIGURAZIONE["gall_tipo"] != "SOLOMIN") gall_javascipt_popup(); //ridimensione l'immagine originale con una di dimensioni max 1200x1200 (solo se è più grande) // TODO parametrizzare ???? //ceccam 22/11/2013 se si usa gall_fill forzo gall_crop a NO if($CONFIGURAZIONE["gall_fill"] == "SI") $CONFIGURAZIONE["gall_crop"] = "NO"; if($CONFIGURAZIONE["gall_lazy"]) $CONFIGURAZIONE["gall_wh_miniatura"] = true; if ($CONFIGURAZIONE["gall_fill_alpha"] === true) $CONFIGURAZIONE["gall_forza_output_png"] = true; //genero il nome //se non sono nel sistema indi //if($DATI["INDI"] != "SI") { // $nome_immagine = ""; //} //---------- ridimensiono l' immagine ------------- $IMM = imm($CONFIGURAZIONE); //-------------------------------------------------- if ($IMM) { //prendo il link e se non ne ha uno nuovo lo genera da indi o no //if($CONF["INDI"] == "SI") $link = genera_link($CONFIGURAZIONE["gall_pagina"],$DATI["lang"],"img=".$CONFIGURAZIONE["gall_img"]."&imgref=".$CONFIGURAZIONE[gall_imgref]); //else $link = genera_link($CONFIGURAZIONE["gall_pagina"],$DATI["lang"],"img=".urlencode($CONFIGURAZIONE["gall_img"])."&imgref=".urlencode($CONFIGURAZIONE[gall_imgref])); //genero dimensioni pop_up if($CONFIGURAZIONE["gall_resize"] == "NO") { $IMM["nome_g"] = $CONFIGURAZIONE["gall_img"]; } //d($CONFIGURAZIONE["gall_tipo"]); if($CONFIGURAZIONE["gall_tipo"] == "PAGINA" or $CONFIGURAZIONE["gall_tipo"] == "LINK_PAGINA" or $CONFIGURAZIONE["gall_tipo"] == "LINK_POPUP") { //genero link popup $link = genera_link($CONFIGURAZIONE["gall_pagina"],$DATI["lang"],"img=".indi_urlencode(indi_urlencode($IMM["nome_g"]))); //genero il nome della finestra per aprire piu' popup $titolo = gall_titolo(); } $alt = $CONFIGURAZIONE["gall_txt_miniatura"]; //controllo se sono nel caso solomin if(in_array($CONFIGURAZIONE["gall_tipo"], ["NOING", "SOLOMIN", "IMG_GRANDE"])) { if($CONFIGURAZIONE["gall_txt_miniatura"] == $DATI["gall_txt_miniatura"]) { //tolgo alt $alt = ""; } } //forzo alt if($CONFIGURAZIONE["gall_alt"]) $alt = indi_htmlentities($CONFIGURAZIONE["gall_alt"]); // INIZIO DEFINIZIONE FIX LORE 25/01/2018 $titleImg = $alt; // VECCHIO: titolo del tag a // NUOVO: oltre al title del tag definsco $titleImg per il title dell' al posto di $alt if($CONFIGURAZIONE["gall_title"]) { $titleImg = indi_htmlentities($CONFIGURAZIONE["gall_title"]); $title = ' title = "'.$titleImg.'"'; } // FINE DEFINIZIONE FIX LORE 25/01/2018 /* TUX 23/04/2018: AGGIUNGO PARAMETRO PER ITEMPROP (MICRODATI GOOGLE) */ if($CONFIGURAZIONE["itemprop_image"]) { $itemprop = ' itemprop="image"'; } //RELOAD //force reload if($CONFIGURAZIONE["gall_force_reload"] == "SI") $force_reload = "?gfr=".mt_rand(1,99999999); //se c'e' il versioning forzo sempre anche in base al versioning if($CONFIGURAZIONE['VERSIONING'] != "NO" and $CONFIGURAZIONE["gall_force_reload"] == "SI") { //controllo che non ci sia un ? if($force_reload) $force_reload .= "&v={indi_versioning}"; } //accodo sempre mtime originale nel caso fosse cambiato if($IMM["mtime_o"]) { //controllo che non ci sia un ? if($force_reload) $force_reload .= "&"; else $force_reload .= "?"; $force_reload .= "m=".($IMM["mtime_o"]+1);//forzo ricaricamento di tutte le immagini in caso di bug aumentare il contatore } if($CONFIGURAZIONE["gall_class"] != "") $CONFIGURAZIONE["gall_class"] = " class=\"".$CONFIGURAZIONE["gall_class"]."\""; //link assoluto se c'e' l' opzione if($CONFIGURAZIONE["gall_link_assoluto"] == "SI" || $GLOBALS["DATI"]["cdn_static_active_force_link_assoluto"]) { if($GLOBALS["DATI"]["cdn_static_active"] == "SI") { $baseurl = cdn_baseurl_static(); } else { $baseurl = $CONFIGURAZIONE['baseurl']; } } $img = ''; $img_g = ''; //creo il titolo (per compatibilita) if($CONFIGURAZIONE["gall_txt_miniatura"]) { //$title = ' title = "'.$CONFIGURAZIONE["gall_txt_miniatura"].'"'; } //genero dimensioni pop_up if($CONFIGURAZIONE["gall_resize"] == "NO") { //se non resizo prendo diensione file originale $POP_H = $IMM["ho"]+$CONFIGURAZIONE["gall_popup_add_h"]; $POP_W = $IMM["wo"]+$CONFIGURAZIONE["gall_popup_add_w"]; } else { $POP_H = $IMM["hg"]+$CONFIGURAZIONE["gall_popup_add_h"]; $POP_W = $IMM["wg"]+$CONFIGURAZIONE["gall_popup_add_w"]; } //controllo dimensioni, se sono troppo piccole non faccio l' ingrandimento if($CONFIGURAZIONE["gall_limit"] != "NO" and $IMM["wo"] < $CONFIGURAZIONE["gall_limit"]) { $CONFIGURAZIONE["gall_tipo"] = "NOING"; //return ($img); } if ($CONFIGURAZIONE["gall_tipo"] == "PAGINA") $img = (''.$img.''); elseif($CONFIGURAZIONE["gall_tipo"] == "LINK_POPUP") $img = ('javascript:popc(\''.$link.'\',\''.$titolo.'\',\''.$POP_W.'\',\''.$POP_H.'\',\'\');'); elseif($CONFIGURAZIONE["gall_tipo"] == "LINK_PAGINA") $img = $link; elseif($CONFIGURAZIONE["gall_tipo"] == "IMG_MINIATURA") $img = $img; elseif($CONFIGURAZIONE["gall_tipo"] == "IMG_GRANDE") $img = $img_g; elseif($CONFIGURAZIONE["gall_tipo"] == "URL_MINIATURA") $img = $baseurl.$IMM["nome_t"].$force_reload; elseif($CONFIGURAZIONE["gall_tipo"] == "URL_GRANDE") $img = $baseurl.$IMM["nome_g"].$force_reload; elseif($CONFIGURAZIONE["gall_tipo"] == "LAZY") { $img = ''.$alt.''; } elseif($CONFIGURAZIONE["gall_tipo"] == "LIGHTBOX"){ if($CONFIGURAZIONE["gall_gruppo"] != "") $img = (''.$img.''); elseif($CONFIGURAZIONE["gall_gruppo2"] != "") $img = (''.$img.''); else $img = (''.$img.''); } elseif($CONFIGURAZIONE["gall_tipo"] == "LIGHTBOX2") $img = (''.$img.''); elseif($CONFIGURAZIONE["gall_tipo"] == "LINK") $img = (''.$img.''); elseif($CONFIGURAZIONE["gall_tipo"] != "NOING" AND $CONFIGURAZIONE["gall_tipo"] != "SOLOMIN") { //genero link popup $link = genera_link($CONFIGURAZIONE["gall_pagina"],$DATI["lang"],"img=".indi_urlencode(indi_urlencode($IMM["nome_g"]))); //genero il nome della finestra per aprire piu' popup $titolo = gall_titolo(); $img = (''.$img.''); } //torno il codice //se il tipo e' una pagina va' nella pagina //UPDATE 13/12/2007 ho spostato questo if DOPO gli if $CONFIGURAZIONE["gall_tipo"], gli if in questione facevano dei return ora mettono tutto in $img e nel caso di $CONFIGURAZIONE["gall_return"] == "ARRAY" ritorno l'html in img_html if($CONFIGURAZIONE["gall_return"] == "PATH") {//attenzione a usare PATH nei background image, è più corretto usare URI che aggiunge un parametro get per il reload if($GLOBALS["DATI"]["cdn_static_active_force_link_assoluto"]) { return $baseurl.$IMM["nome_t"]; } else { return $IMM["nome_t"]; } } else if($CONFIGURAZIONE["gall_return"] == "URI") { if($GLOBALS["DATI"]["cdn_static_active_force_link_assoluto"]) { return $baseurl.$IMM["nome_t"]."?m=".$IMM["mtime_o"]; } else { return $IMM["nome_t"]."?m=".$IMM["mtime_o"]; } } else if($CONFIGURAZIONE["gall_return"] == "ARRAY") { $prefix = ""; if($GLOBALS["DATI"]["cdn_static_active_force_link_assoluto"]) { $prefix = $baseurl; } //$OUT["img_nome_pulito"] = gall_pulisci_nome($CONFIGURAZIONE["gall_img"]); $OUT["mtime_o"] = $IMM["mtime_o"]; $OUT["img_o"] = $CONFIGURAZIONE["gall_img"]; $OUT["img_oh"] = $IMM["ho"]; $OUT["img_ow"] = $IMM["wo"]; $OUT["img_g"] = $prefix.$IMM["nome_g"]; $OUT["img_gh"] = $IMM["hg"]; $OUT["img_gw"] = $IMM["wg"]; $OUT["img_t"] = $prefix.$IMM["nome_t"]; $OUT["img_th"] = $IMM["ht"]; $OUT["img_tw"] = $IMM["wt"]; $OUT["img_html_g"] = $img_g; $OUT["img_html"] = $img; $OUT["img_link"] = $link; $OUT["imgref"] = $CONFIGURAZIONE["gall_imgref"]; $OUT["txt"] = $CONFIGURAZIONE["gall_txt_miniatura"]; $OUT["gall_title"] = $CONFIGURAZIONE["gall_title"]; //indirizzi $OUT["img_url_t"] = $baseurl.$IMM["nome_t"].$force_reload; $OUT["img_url_g"] = $baseurl.$IMM["nome_g"].$force_reload; return $OUT; } return ($img); } else return FALSE; }); } // TEMPLATE GALLERIA //###################################################### //genera il nome dell' immagine esteso function imm_genera_nome($originale,$nome) { $nome_out = explode(".",$originale); $nome_out = explode("/",$nome_out["0"]); $nome_out = $nome_out[sizeof($nome_out)-1]; $nome_pulito = $nome_out; // $nome_out = $nome_out."_".$nome; if($nome == "") $nome = "ELAB_$nome_pulito"; $nome_out = $nome; $nome_out = trim($nome_out); $nome_out = str_replace (" ","_",$nome_out); $nome_out = str_replace ("+","_",$nome_out); $nome_out = str_replace ("/","_",$nome_out); $nome_out = str_replace ("\\","_",$nome_out); $nome_out_t = $nome_out."_t"; $OUT["nome"] = str_replace ($nome_pulito,$nome_out,$originale); $OUT["nome_t"] = str_replace ($nome_pulito,$nome_out_t,$originale); return $OUT; } function gall_is_online($uri){ return strpos($uri, "://") !== false; } function gall_nome($originale=NULL,$gall_imgref=NULL,$extra_return=0,$CONFIGURAZIONE=array()) { global $CONF, $DATI; $isOnline = gall_is_online($originale); if($CONF['indi_subversion'] > 4 or $CONF['sito'] == "premioceleste" ) { if($DATI['gall_name_use_timestamp']){//creato nuovo parametro per non rifare tutte le miniature di tutti i siti $md5 = $originale.$nome_id_ref.$gall_imgref; if(!$isOnline) $md5 .= filemtime($originale);//se è online non controllo sempre la data modifica $nome_id = md5($md5); $nome_id_base = crc32($nome_id);//per la cartella, con un intero ho meno varianza (0-9) CRC32 va da 0 a 4294967295 //correggo versione damiano che con i path dell'admin_tnx tirava fuori sempre $nome_out = '' $nome_out = explode(".",$originale); $nome_out = explode("/",$nome_out[sizeof($nome_out)-2]); $nome_out = $nome_out[sizeof($nome_out)-1]; } else{ $nome_id_base = ceil(abs(crc32(md5($originale)))/100000); $nome_id_ref = ceil(abs(crc32(md5($gall_imgref)))/100000); if($gall_imgref != NULL) $nome_id = $nome_id_base ."_". $nome_id_ref; $nome_out = explode(".",$originale); $nome_out = explode("/",$nome_out["0"]); $nome_out = $nome_out[sizeof($nome_out)-1]; } //in base all' ID sistemo nella cartella $cartella_0 = substr($nome_id_base,1,1); $cartella_1 = substr($nome_id_base,2,1); $dir_split = "$cartella_0/$cartella_1/"; $nome_pulito = str_replace(array("à","ò","ó","è","é","ì","ù","\\","/",":","$","\"","'","_"),array("a","o","o","e","e","i","u","-","-","-","-","-","-","-"),$nome_out); $nome_pulito = preg_replace("/[^a-z0-9\s_\-\.]/i", "-", $nome_pulito); if($CONF['indi_subversion'] > 5 ) { $nome_pulito = str_replace(array(" "),array("-"),$nome_pulito); } if($CONF['indi_subversion'] > 4 ) { //controllo estensione $ext = strtolower(substr($originale, strrpos($originale, ".")+1)); if ((($ext == "png" || $CONFIGURAZIONE["gall_forza_output_png"]) || $CONFIGURAZIONE["gall_maschera"]) && !$CONFIGURAZIONE["gall_forza_output_jpeg"]) $ext_output = "png"; else $ext_output = "jpg"; } } else { $nome_id = abs(crc32(md5($originale))); if($gall_imgref != NULL) $nome_id = $nome_id + abs(crc32(md5($gall_imgref))); //in base all' ID sistemo nella cartella $cartella_0 = substr($nome_id,1,1); $cartella_1 = substr($nome_id,2,1); $dir_split = "$cartella_0/$cartella_1/"; $nome_out = explode(".",$originale); $nome_out = explode("/",$nome_out["0"]); $nome_out = $nome_out[sizeof($nome_out)-1]; $nome_pulito = str_replace(array("à","ò","ó","è","é","ì","ù","\\","/",":","$","\"","'"),array("a","o","o","e","e","i","u","_","_","_","_","_","_"),$nome_out); $nome_pulito = preg_replace("/[^a-z0-9\s_\-\.]/i", "_", $nome_pulito); $ext_output = "jpg"; } $nome_pulito = substr($nome_pulito, 0, 200);//lunghezza massima 255 (id:32, estensione:max4, altro:4) $OUT["nome"] = $CONF["dir_indi"].$CONF["dir_indi_img"].$dir_split.$nome_pulito."_".$nome_id.".".$ext_output; $OUT["nome_t"] = $CONF["dir_indi"].$CONF["dir_indi_img"].$dir_split.$nome_pulito."_".$nome_id."_t.".$ext_output; $OUT["nome_online"] = $CONF["dir_indi"].$CONF["dir_indi_img"].$dir_split.md5($originale)."_online_".$nome_id.".".$ext_output; //d($OUT); if($extra_return == 1) { $OUT['id'] = $nome_id_base; $OUT['cartella'] = $CONF["dir_indi"].$CONF["dir_indi_img"].$dir_split; } return $OUT; } //prova a cancellare tutte le miniature e l' immagine originale function gall_cancella_tutto($immagine_originale) { clearstatcache(); if(trim($immagine_originale) == "") return false; //provo a cancellare tutto $nome = gall_nome($immagine_originale,NULL,1); //cerco le miniature e le cancello $file_da_cancellare = indi_file_in_dir($nome['cartella'],"_".$nome["id"]."_",1); if($file_da_cancellare) { foreach($file_da_cancellare as $file) { if(unlink($file)) { //print($file); //print("
"); } else { //d_err("errore cancellazione file: $file"); } } } //cancello immagine originale if(is_file($immagine_originale) and unlink($immagine_originale)) { //print($immagine_originale); //print("
"); } else { //d_err("errore cancellazione file: $file"); } } function img_resize_fix_webservice($immo){//chiamata SOLO da admin //cecca 14/06/2023: parlato con carlo, si prova a togliere questa sleep e si monitorizza //carlo 19/06/2023: gli errori arrivano (front end e backend via webservice ridimensionano contemporaneamente l'immagine), va tenuto lo sleep, ma ho ristrutturato il codice in modo che lo sleep venga fatto solo per il webservice usato in background dal backend sleep(2);//provo a vedere se evito gli errori che arrivano imagecreatefromjpeg(): '{path_qui}' is not a valid JPEG file fix_jpg_icc($immo); img_resize_fix($immo, $GLOBALS['CONF']['img_fix'], $GLOBALS['CONF']['img_fix']); return true;//altrimenti il webservice da' errore (da indi, da admin non aspetto la risposta) } //controlla e ridimensione se troppo grande function img_resize_fix($file, $w=1200, $h=1200, $q=90){ global $DATI; set_time_limit(60*5);//questa funzione potrebbe aver bisogno di un po' più di tempo... if(!is_file($file) || !$w || $w == 'NO') return; list($width, $height) = getimagesize($file); if(strtolower(substr($file, -4)) == ".png"){ $read = "imagecreatefrompng"; $save = "imagepng"; $qK = 9/100; } else if(strtolower(substr($file, -5)) == ".webp"){//non testato (sul salva non c'è il terzo parametro) $read = "imagecreatefromwebp"; $save = "imagewebp"; $qK = 100; } else if(strtolower(substr($file, -4)) == ".gif"){//non testato (sul salva non c'è il terzo parametro) $read = "imagecreatefromgif"; $save = "imagegif"; $qK = 0; } else{ $read = "imagecreatefromjpeg"; $save = "imagejpeg"; $qK = 1; } if($width > $w or $height > $h) { d_info("img_resize_fix 2 dentro reszie","mod_galleria","INDI"); $maxx = $h; $maxy = $w; ini_set('memory_limit', '4096M'); // if(time() < mktime(9 /*hours*/, 0 /*minutes*/, 0 /*seconds*/, 5 /*month*/, 1 /*day*/, 2021)){ // copy($file, "/tmp/".array_pop(explode("/",$file))); // } $source_image = $read($file); if(!$source_image) return false; list($width, $height) = getimagesize($file); $percent1 = $width / $maxx; $percent2 = $height / $maxy; $percent = max($percent1,$percent2); $new_eight = round($height /$percent); $new_width = round($width /$percent); $dest_image = imagecreatetruecolor($new_width, $new_eight); imageSaveAlpha($dest_image, true); imageAlphaBlending($dest_image, false); imagecopyresampled($dest_image, $source_image, 0, 0, 0, 0, $new_width, $new_eight, $width, $height); $tmp = $file . "." . mt_rand();//se uso un nome fisso e 2 richieste contemporanee avviano il salavataggio la secondo darebbe "file non trovato" if($save($dest_image, $tmp, $q*$qK)){ rename($tmp, $file);//se durante il salvataggio si raggiunge il timelimit l'immagine sarebbe corrotta d_info("IMG FIX (Ridimensionata originale perchè troppo grande) - img_resize_fix($file,$w,$h,$q)","mod_galleria","INDI"); indi_log("mod_galleria: IMG FIX (Ridimensionata originale perchè troppo grande) - img_resize_fix($file,$w,$h,$q)"); } else{ d_err("Non ho potuto salvare l'immagine ridimensionata - mod_galleria: img_resize_fix($file,$w,$h,$q)","mod_galleria","INDI"); } } else { d_info("img_resize_fix 3 fuori reszie","mod_galleria","INDI"); return FALSE; } } //toglie profilo colore adobe se presente function fix_jpg_icc($file) { // return; //ceccca, se jpg lancia jpgicc per correggere le jpg salvate con colorspace embedded di adobe, vedi mail con ibfor giugno 2023 if (strtolower(substr($file, -4)) == ".jpg") { $atime = fileatime($file); $mtime = filemtime($file); //31/08/2023 cecca, basta backup //$out=null;$ret=null; //exec("cp \"".escapeshellcmd($file)."\" \"".escapeshellcmd($file.".backupjpgicc")."\" 2>&1", $out, $ret); $out=null;$ret=null; $cmd = "jpgicc \"".escapeshellcmd($file)."\" \"".escapeshellcmd($file.".jpgicc")."\" 2>&1"; exec($cmd, $out, $ret); d_info("img_resize_fix cmd:" . $cmd, "mod_galleria","INDI"); if ($ret == 0) { //mail("mceccarelli@demo.tnx.it","img_resize_fix jpgicc ok $_SERVER[SERVER_NAME] " . escapeshellcmd($file), "$_SERVER[SERVER_NAME]$_SERVER[REQUEST_URI]\n$file\nout:" . print_r($out, true) . "\nret:[$ret]\n\n$bt", "From: cecca@tnx.it\n"); exec("mv \"".escapeshellcmd($file.".jpgicc")."\" \"".escapeshellcmd($file)."\"", $out, $ret); touch($file, $mtime, $atime); } else { // mailtnx("c@localhost", "Debug ".microtime(true), __FILE__.":".__LINE__."\n".print_r(array($out, $ret), true)); if(strpos("Invalid SOS parameters for sequential JPEG", implode("", $out) === false)) trigger_error("Errore rimozione profilo colore da $file"); // mailtnx("mceccarelli@demo.tnx.it", "img_resize_fix jpgicc ko $_SERVER[SERVER_NAME] " . escapeshellcmd($file), "$_SERVER[SERVER_NAME]$_SERVER[REQUEST_URI]\n$file\nout:". print_r($out, true) . "\nret:[$ret]\n\n$bt", "From: cecca@tnx.it\n"); d_info("img_resize_fix out:" . print_r($out, true), "mod_galleria","INDI"); } } } function getimagesize_tnx($file){ if(!is_file($file)){ trigger_error("getimagesize_tnx: immagine non trovata"); return false; } if(substr($file, -4) == '.svg'){ $document = new DOMDocument(); $document->loadXML(file_get_contents($file), LIBXML_NOENT); $svg = $document->getElementsByTagName("svg")->item(0); if(!$svg){ trigger_error("svg vuoto?"); return false; } $viewBox = explode(" ", $svg->getAttribute("viewBox")); return array($viewBox[2], $viewBox[3]); } else return getimagesize($file); } function gall_svg_tag($file, $fillAllColor_or_fillMap = "", $classe = ""){ $xml = file_get_contents(gall_svg_path($file, $fillAllColor_or_fillMap)); $return = substr($xml, strpos($xml, ">")+1); if($classe) $return = str_replace("loadXML($svg_content, LIBXML_NOENT)){ trigger_error("Errore nella lettura del file sorgente ".$file); return false; } $xpath = new DOMXPath($document); // Rimuovo tutti i commenti (principalmente quello sul programma che ha generato l'xml) foreach ($xpath->query('//comment()') as $comment){ $comment->parentNode->removeChild($comment); } // Rimuovo tutti gli attributi del tag SVG e riaggiungo quelli di default foreach($document->getElementsByTagName('svg') as $svg){ if($resetAttributes){ $defaultAttributes["version"] = "1.1"; $defaultAttributes["x"] = "0px"; $defaultAttributes["y"] = "0px"; $defaultAttributes["viewBox"] = "0 0 128 128"; $defaultAttributes["style"] = "enable-background:new 0 0 128 128;"; $defaultAttributes["xml:space"] = "preserve"; $svg->removeAttribute("id"); if($svg->hasAttributes()){ // Salvo il un array i nomi di tutti gli attributi foreach($svg->attributes as $attr) $attrToRem[] = $attr->nodeName; // Rimuovo tutti gli attributi dal tag foreach($attrToRem as $toRem) $svg->removeAttribute($toRem); } // Aggiunto tutti gli attributi di default al tag SVG foreach($defaultAttributes as $attrName => $attrValue) $svg->setAttribute($attrName, $attrValue); } foreach($document->getElementsByTagName("g") as $p){ $p->removeAttribute("id"); } if($fillAllColor_or_fillMap){ //coloro foreach(array('polygon', 'rect', 'circle', 'path', 'ellipse') as $t) foreach($document->getElementsByTagName($t) as $p){ if(is_string($fillAllColor_or_fillMap)) $fill = $fillAllColor_or_fillMap; else $fill = $fillAllColor_or_fillMap[substr($p->getAttribute("fill"), 1)]; if($fill) $p->setAttribute("fill", "#".$fill); } } } file_put_contents($dest, $document->saveXML()); } // $GLOBALS['discolento']["gall_svg_path"] += microtime(true); $GLOBALS['gall_svg_path_cache'][$kCache] = $dest; // $GLOBALS['stat3k']['gall_svg_path_time'] += microtime(true); return $dest; } function gall_svg($file, $fillAllColor_or_fillMap = "", $alt = "", $class = "", $absolute = false, $title = null){ if($_GET["debugtnx"] == 1) { return ""; } else { $attributi = array(); if(!is_null($alt)) $attributi[] = 'alt="' . $alt . '"'; if(!is_null($title)) $attributi[] = 'title="' . $title . '"'; if($class != "") $attributi[] = 'class="' . $class . '"'; if($GLOBALS["DATI"]["cdn_static_active_force_link_assoluto"]) { $prefix = cdn_baseurl_static(); } else if($absolute) { $prefix = $GLOBALS["DATI"]['baseurl']; } else { $prefix = ''; } return ""; } } //va ricompilato il nostro php 5.6 con --with-webp-dir // function gall_getimagesize($file){ // if(substr($file, -5) == '.webp'){ // $img = imagecreatefromwebp($file); // $width = imagesx($img); // $height = imagesy($img); // /* // [0] => 350 // [1] => 350 // [2] => 2 // [3] => width="350" height="350" // [bits] => 8 // [channels] => 3 // [mime] => image/jpeg // */ // return array( // $width, // $height, // IMAGETYPE_WEBP, // "width=\"$width\" height=\"$height\"", // "bits" => "", // "mime" => "image/webp" // ); // } // else return getimagesize(($file)); // } function gallConvertWebp($from, $to, $q = 80){ shell_exec("cwebp -q \"".escapeshellcmd($q)."\" \"".escapeshellcmd($from)."\" -o \"".escapeshellcmd($to)."\""); } //funzione per il ridimensionamento dell' immagine function imm($CONFIGURAZIONE){ //d_info("Creo l'immagine con imgref = ".$CONFIGURAZIONE["gall_imgref"],"mod_galleria"); global $DATI; // $GLOBALS['stat3k']['gall_time'] -= microtime(true); // $GLOBALS['stat3k']['gall']++; if(strpos($CONFIGURAZIONE['gall_img'], $DATI["dir_indi"].$DATI["dir_indi_img"]) === 0){ trigger_error("Si è passato al gall il nome di un file generato dal gall (".$CONFIGURAZIONE['gall_img']."), che cambia continuamente timestamp e genererà sempre nuovi files"); return array(); } //prova ad allungare il tempo di esecuzione //messo qui influenza qualsiasi richiesta a indi!!! // set_time_limit(50000); $pi = pathinfo($CONFIGURAZIONE['gall_img']); $estensione = strtolower($pi["extension"]); if($estensione == 'jpeg') $estensione = 'jpg'; if($CONFIGURAZIONE['img_fix_name'] == "SI") { /* $slash_pos = strrpos($CONFIGURAZIONE['gall_img'], "/"); if($slash_pos) $nome_ext = substr($CONFIGURAZIONE['gall_img'], 1+$slash_pos); else $nome_ext = $CONFIGURAZIONE['gall_img']; $dot_pos = strrpos($nome_ext, "."); $nome = substr($nome_ext, 0, $dot_pos); $ext = substr($nome_ext, $dot_pos+1); */ $nome_safe = preg_replace("/[^a-z0-9\s_\-\.]/i", "", $pi["filename"]); $ext_safe = $estensione; $nome_ext_safe = $nome_safe . '.' . $ext_safe; if($nome_ext_safe != $pi["basename"]){ $full_path = $pi["dirname"] ."/". $nome_safe . '.' . $ext_safe; while (file_exists($full_path)){//se il file esiste creo un nome random $full_path = $pi["dirname"] ."/". $nome_safe . "_" . mt_rand(0,9999) . '.' . $ext_safe; } if(!rename($pi["dirname"]."/".$pi["basename"], $full_path)){ indi_debug_email("carlo@tnx.it", "funzione img_fix_name", "impossibile rinominare il file ".$pi["dirname"]."/".$pi["basename"]); } else{ $CONFIGURAZIONE['gall_img'] = $pi["dirname"]."/".$nome_ext_safe; } } } $originale = $CONFIGURAZIONE["gall_img"]; //controllo se e' remota (da fare piu' complesso) if(gall_is_online($originale)) { //immagine on-line //scarico e salvo l' immagine in base al nome //imposto il nome del file dell' imagine remota if($CONFIGURAZIONE['gall_url_to_file'] != NULL) { $OLfilename = $CONFIGURAZIONE['gall_url_to_file']; } else { $OLfilename = gall_nome($originale,$CONFIGURAZIONE["gall_imgref"]); //nome del file dove viene salvata l' immagine originale se on-line $OLfilename = $OLfilename['nome_online']; } if(!is_file($OLfilename)) { $OL_img = indi_file_get_contents($originale); if(!$OL_img) return false;//errore già inviato da indi_file_get_contents if (!$OLhandle = fopen($OLfilename, 'w+')) { d_err("mod_galleria: imm(http): ERRORE download immagine: ".$originale,"mod_galleria","INDI"); return FALSE; } if (!fwrite($OLhandle, $OL_img)) { d_err("mod_galleria: imm(http): ERRORE salvataggio immagine: ".$originale,"mod_galleria","INDI"); return FALSE; } } $originale = $OLfilename; } //controllo se c'e' immagine principale; if(!is_file($originale)) { d_info("imm($originale) WARNING immagine originale non trovata!","mod_galleria","INDI"); indi_log("imm($originale) WARNING immagine originale non trovata!"); //se sono in locale metto immagine sostitutiva if($GLOBALS['DATI']['dove_sono'] != "loc") return false; else $originale = $GLOBALS['DATI']['dir_lib'] . "immagine_non_trovata.jpg"; } //GENERO NOME $nomiStd = gall_nome($originale,$CONFIGURAZIONE["gall_imgref"],0,$CONFIGURAZIONE); $nomiWebp = array(); foreach($nomiStd as $k=>$i) $nomiWebp[$k] = substr($i, 0, strrpos($i, ".")).".webp"; if($CONFIGURAZIONE['gall_webp']){ $nomiFormatoRichiesto = $nomiWebp; } else{ $nomiFormatoRichiesto = $nomiStd; } $tipo = $CONFIGURAZIONE["gall_tipo"]; $qg = $CONFIGURAZIONE["gall_q_grande"]; $qp = $CONFIGURAZIONE["gall_q_miniatura"]; $bordo = $CONFIGURAZIONE["gall_bordo"]; $scritta = $CONFIGURAZIONE["gall_scritta"]; $max_h = $CONFIGURAZIONE["gall_max_h"]; $max_w = $CONFIGURAZIONE["gall_max_w"]; $mtime_o = filemtime($originale); if( (!$CONFIGURAZIONE["no_cache"] || $DATI['dove_sono'] != 'loc')//in locale posso settare no_cache per rigenerare sempre && !$_GET["no_gall_cache"] //posso passare in get no_gall_cache per rigenerare sempre && @filemtime($nomiStd["nome"]) >= $mtime_o //anche se sto usando le webp mi baso sulla versione standard sia per la conversione che per le dimensioni && @filemtime($nomiStd["nome_t"]) >= $mtime_o //anche se usando le webp mi baso sulla versione standard sia per la conversione che per le dimensioni && (!$CONFIGURAZIONE['gall_webp'] || (@filesize($nomiFormatoRichiesto["nome"]) && @filesize($nomiFormatoRichiesto["nome_t"])))//mi serve una webp che ancora non c'è (uso filesize perchè per una mezza giornata sono state creati dei file di 0 byte) ){ //ho già la miniatura $IMM['mtime_o'] = $mtime_o; $IMM["nome_g"] = $nomiFormatoRichiesto["nome"]; $IMM["nome_t"] = $nomiFormatoRichiesto["nome_t"]; if(!$CONFIGURAZIONE['gall_skip_infos'] || $CONFIGURAZIONE['gall_wh_ingrandimento']){//per testare questo parametro ricordarsi di svuotare la cache di linux dopo ogni richiesta con "echo 3 > /proc/sys/vm/drop_caches" $G = getimagesize($nomiStd["nome"]); $IMM['hg'] = $G["1"]; $IMM['wg'] = $G["0"]; } if(!$CONFIGURAZIONE['gall_skip_infos'] || $CONFIGURAZIONE['gall_wh_miniatura']){ $P = getimagesize($nomiStd["nome_t"]); $IMM['ht'] = $P["1"]; $IMM['wt'] = $P["0"]; } if(!$CONFIGURAZIONE['gall_skip_infos']){ $imm_info = getimagesize($originale);//non funziona con php 7 e webp (serve >= 7.1) $IMM['ho'] = $imm_info[1]; $IMM['wo'] = $imm_info[0]; } touch($nomiStd["nome"]); touch($nomiStd["nome_t"]); if($CONFIGURAZIONE['gall_webp']){ touch($nomiWebp["nome"]); touch($nomiWebp["nome_t"]); } d_info("$originale PRESA DA CACHE - Orig: nome_g:".$IMM["nome_g"]." nome_t:".$IMM["nome_t"] . " gall_img:" . $CONFIGURAZIONE["gall_img"],"mod_galleria","INDI"); // $GLOBALS['stat3k']['gall_time'] += microtime(true); return $IMM; } if(false){ //W:\www\carlo\imagemagick convert //abbandonato, non ho trovato un modo //rimuovo eventuali profili colore, mantenendo la data originale //(gd, ovvero le funzioni di php, non supportano il profilo colore: https://bugs.php.net/bug.php?id=53598) //https://www.imagemagick.org/discourse-server/viewtopic.php?t=16464 //https://www.thebarkinglens.com/blog/2016/3/29/whats-the-difference-between-a-color-space-and-a-color-profile $tmp = "/tmp/".uniqid(mt_rand(), true); shell_exec("convert $originale -profile \"$DATI[libPath]colorspace/sRGB.icc\" -set colorspace RGB $tmp"); shell_exec("touch -r $originale $tmp");//se cambia il timestamp, cambia il nome che genera il gall e quindi si entrerebbe in un loop di rigenerazioni shell_exec("mv $tmp $originale"); } //if(!is_file($nomiStd["nome"]) || filemtime($nomiStd["nome"]) < $mtime_o || !is_file($nomiStd["nome_t"]) || filemtime($nomiStd["nome_t"]) < $mtime_o) { //cecca 05/06/2020, aggiungo no_cache e no_gall_cache altrimenti non rigenera, mi sembrava normale che rigenerasse se passati uno di quei due parametri... if(!is_file($nomiStd["nome"]) || filemtime($nomiStd["nome"]) < $mtime_o || !is_file($nomiStd["nome_t"]) || filemtime($nomiStd["nome_t"]) < $mtime_o || $CONFIGURAZIONE["no_cache"] || $_GET["no_gall_cache"]) { if(strpos($originale, "/uploads/") === false) fix_jpg_icc($originale);//quelle dell'admin sono già processate in img_resize_fix_webservice() d_info("imm($originale) Inizio RESIZE IMMAGINE non in cache", "mod_galleria","INDI"); if(is_locale()) indi_log("mod_galleria: imm($originale) Inizio RESIZE IMMAGINE"); // console_log("gall $originale"); // OLD fino 9/2024 // $imm_info = mime_content_type($originale); // $mime = $imm_info["mime"]; $mime = mime_content_type($originale); //Trovo tipo immagine ??? da funzionizzare if($mime == "image/gif") $imm_tipo = "gif"; elseif($mime == "image/jpeg" or $mime == "image/jp2") $imm_tipo = "jpg"; elseif($mime == "image/png") $imm_tipo = "png"; elseif($mime == "image/webp") $imm_tipo = "webp"; //elseif($mime == "image/tiff") $imm_tipo = "tif"; elseif($imm_tipo == FALSE) $imm_tipo = "noimage"; else $imm_tipo = "nosupport"; if($imm_tipo == "noimage") { d_info("imm() Non e' un immagine ($mime, $originale)","mod_galleria","INDI"); trigger_error("mod_galleria: imm() Non è un immagine (MIME: $mime, FILE: $originale)"); return FALSE; } elseif($imm_tipo == "nosupport") { d_info("imm() Tipo non supportato: (MIME: $mime, FILE: $originale)","mod_galleria","INDI"); trigger_error("mod_galleria:imm() Tipo non supportato: (MIME: $mime, FILE: $originale)"); return FALSE; } else if($estensione != $imm_tipo){ // trigger_error("imm() MIME non corrispondente a estensione: (MIME: $mime ($imm_tipo), EXT: $estensione, FILE: $originale)",E_USER_ERROR); } //cambio funzione in base al tipo $immo = $originale; img_resize_fix($immo, $CONFIGURAZIONE['img_fix'], $CONFIGURAZIONE['img_fix']); if($imm_tipo == "gif") { $immo = imagecreatefromgif($immo); } elseif ($imm_tipo == "png") { // indi_log_globale("DEBUG CARLO: $immo ".print_r(getimagesize($immo), true)); $immo = imagecreatefrompng($immo); imageAlphaBlending($immo, true); imageSaveAlpha($immo, true); } elseif ($imm_tipo == "jpg") { if($CONFIGURAZIONE["gall_auto_rotate"] == "SI") { //sistemo immagine originale $exif = gall_info_exif($immo); gall_auto_rotate($immo,$exif); } $immoName = $immo; $immo = @imagecreatefromjpeg($immo); if($immo === false){ trigger_error("Immagine probabilmente corrotta, provo a recuperarla con ImageMagick: $immoName"); shell_exec("convert $immoName $immoName"); } } elseif ($imm_tipo == "webp") { $immo = imagecreatefromwebp($immo); } if($CONFIGURAZIONE["gall_forza_output_png"]) $imm_tipo = "png"; //controllo se è un immagine if($immo == FALSE) { d_info("ERRORE imm($originale) non è un immagine (MIME: $mime)","mod_galleria","INDI"); indi_log("mod_galleria: imm($originale) ERRORE non è un immagine (MIME: $mime)"); return FALSE; } // elseif($imm_tipo == "tif") $immo = imagecreatefromtif($immo); $immow = imagesx($immo); $immoh = imagesy($immo); if($immow > $immoh && $CONFIGURAZIONE["gall_crop_orizzontale"] == "SI"){ $CONFIGURAZIONE["gall_crop_max"] = "SI"; }elseif($immow <= $immoh && $CONFIGURAZIONE["gall_crop_orizzontale"] == "SI"){ $CONFIGURAZIONE["gall_crop_max"] = "NO"; } if($CONFIGURAZIONE["gall_crop_max"] == "SI") { //se non specificato faccio miniatura come l' immagine con il bordo //e croppo l' immagine in maniera giusta in base alle dimensioni stabilite //trovo la dimensione massima della miniatura $percent1t = $immow / $CONFIGURAZIONE["gall_max_w"]; $percent2t = $immoh / $CONFIGURAZIONE["gall_max_h"]; $percentt = min($percent1t,$percent2t); $h = round($immoh / $percentt); $w = round($immow / $percentt); //### ridimensiono miniatura $dest_image = imagecreatetruecolor($CONFIGURAZIONE["gall_max_w"], $CONFIGURAZIONE["gall_max_h"]); // imageAlphaBlending($dest_image, true); // imageSaveAlpha($dest_image, true); if($imm_tipo == "png") { $white_tmp_t = imagecolorallocate($dest_image, 255, 255, 255 ); imagefill($dest_image,0,0,$white_tmp_t); } $sh = -($h-$CONFIGURAZIONE["gall_max_h"])/2; $sw = -($w-$CONFIGURAZIONE["gall_max_w"])/2; if ($h == $CONFIGURAZIONE["gall_max_h"]) $sh = 0; if ($w == $CONFIGURAZIONE["gall_max_w"]) $sw = 0; imagecopyresampled($dest_image, $immo, $sw, $sh, 0, 0, $w, $h, $immow, $immoh); } else { $percent1 = $immow / $max_w; $percent2 = $immoh / $max_h; $percent = max($percent1,$percent2); //trovo dimensioni immagine grande $h = round($immoh / $percent); $w = round($immow /$percent); //Forzo la dimensione a quella orifinale if($CONFIGURAZIONE["gall_resize_furbo"] == "SI") { if($immow < $max_w and $immoh < $max_h ) { $w = $immow; $h = $immoh; } } //creo immagine $dest_image = imagecreatetruecolor($w, $h); if($imm_tipo == "png") { if($CONFIGURAZIONE['indi_subversion'] < 5 ) { $white_dest_image = imagecolorallocate($dest_image, 255, 255, 255 ); imagefill($dest_image,0,0,$white_dest_image); } else { imageSaveAlpha($dest_image, true); imageAlphaBlending($dest_image, false); } } imagecopyresampled ($dest_image, $immo, 0, 0, 0, 0, $w, $h, $immow, $immoh); } //eventualmente scrivo qualcosa sopra se c'e' il file if($scritta != "" and is_file($scritta)) { //ricalcolo dimensione immagine $w = imagesx($dest_image); $h = imagesy($dest_image); //margine dal bordo if($CONFIGURAZIONE["gall_margine"] == "") $margine = "5"; else $margine = $CONFIGURAZIONE["gall_margine"]; //posizione in altezza (alto|basso|centro) if($CONFIGURAZIONE["gall_posh"] == "") $posh = "basso"; else $posh = $CONFIGURAZIONE["gall_posh"]; //posizione in altezza (sinistra|basso|destra) if($CONFIGURAZIONE["gall_posw"] == "") $posw = "destra"; else $posw = $CONFIGURAZIONE["gall_posw"]; $scritta = imagecreatefrompng($scritta); $scrittaw = imagesx($scritta); $scrittah = imagesy($scritta); //posizione orizzontale //$posw = $w/2-($scrittaw/2); //CENTRO IN BASSO if($posw == "destra") $posw = $w-$scrittaw-$margine; if($posw == "centro") $posw = $w/2-($scrittaw/2); if($posw == "sinistra") $posw = $margine; //posizione verticale if($posh == "alto") $posh = $margine; if($posh == "centro") $posh = $h/2-($scrittah/2); if($posh == "basso") $posh = ($h-$scrittah-$margine); imageAlphaBlending($dest_image, true);//se l'immagine originale è una png può venire lo sfondo della scritta bianco invece che trasparente imageAlphaBlending($scritta, true); imageSaveAlpha($scritta, true); imagecopy($dest_image, $scritta,$posw,$posh,0,0,$scrittaw, $scrittah); } //scrivo immagine grande imageinterlace($dest_image, true); //cecca 07/07/2016 - per premioceleste, salvava una jpg dentro la jpg, fixato forzando png se png in origine //$retsalva = imagejpeg($dest_image,$nomiStd["nome"],$qg); $retsalva = false; if($imm_tipo == "png" && !$CONFIGURAZIONE["gall_forza_output_jpeg"]) { $retsalva = imagepng($dest_image,$nomiStd["nome"]); } else { $retsalva = imagejpeg($dest_image,$nomiStd["nome"],$qg); } if($retsalva) { //indi_log_globale("OK ($nomiStd[nome])"); if($GLOBALS["CONF"]["DEBUG"] == "SI") d_info("OK Scritta IMMAGINE Grande:".$nomiStd["nome"]." Q:".$qg,"mod_galleria","INDI"); } else { indi_log_globale("ERR ($nomiStd[nome])"); if($GLOBALS["CONF"]["DEBUG"] == "SI") d_err("ERRORE Scrittura immagine Grande:".$nomiStd["nome"]." Q:".$qg,"mod_galleria","INDI"); } //############### MINIATURA ######################## if($CONFIGURAZIONE["gall_crop"] == "SI") { //se non specificato faccio miniatura come l' immagine con il bordo //e croppo l' immagine in maniera giusta in base alle dimensioni stabilite $miniaturaW = $CONFIGURAZIONE["gall_min_w"]; $miniaturaH = $CONFIGURAZIONE["gall_min_h"]; if($bordo && $bordo != 'NO'){ if(is_file($bordo)) { $bordoRes = imagecreatefrompng($bordo); $miniaturaW = imagesx($bordoRes); $miniaturaH = imagesy($bordoRes); } else trigger_error("Bordo non trovato: ".$bordo); } if($CONFIGURAZIONE["gall_maschera"] && is_file($CONFIGURAZIONE["gall_maschera"])){ $imm_tipo = "png"; $maschera = imagecreatefrompng($CONFIGURAZIONE["gall_maschera"]); $miniaturaW = imagesx($maschera); $miniaturaH = imagesy($maschera); } //trovo la dimensione massima della miniatura $percent1t = $immow / $miniaturaW; $percent2t = $immoh / $miniaturaH; $percentt = min($percent1t,$percent2t); $ht = round($immoh / $percentt); $wt = round($immow / $percentt); //### ridimensiono miniatura $tmp_t = imagecreatetruecolor($miniaturaW, $miniaturaH); if($imm_tipo == "png") { if($CONFIGURAZIONE['indi_subversion'] < 5 ) { $white_tmp_t = imagecolorallocate($tmp_t, 255, 255, 255 ); imagefill($tmp_t,0,0,$white_tmp_t); } else { imageSaveAlpha($tmp_t, true); imageAlphaBlending($tmp_t, (boolean)$CONFIGURAZIONE["gall_maschera"]);//carlo: era false, ho visto che se uso bordo + maschera deve essere true prima di applicare il bordo altrimenti viene nera } } $sh = -($ht-$miniaturaH)/2; $sw = -($wt-$miniaturaW)/2; if ($ht == $miniaturaH) $sh = 0; if ($wt == $miniaturaW) $sw = 0; //Forzo la dimensione del sorgente della miniatura alle dimensioni originali in tutti i casi bordo o no if($CONFIGURAZIONE["gall_crop_norid"] == "SI") { $wt = $immow; $ht = $immoh; } //cecca, 01/08/2019 gestione del gall_crop_posizione (richiesto dal stelvi) if ($CONFIGURAZIONE["gall_crop_posizione"] == "alto") { $sh = 0; $sw = -($wt-$miniaturaW) / 2; } else if ($CONFIGURAZIONE["gall_crop_posizione"] == "basso") { $sh = -($ht-$miniaturaH); $sw = -($wt-$miniaturaW) / 2; } else if ($CONFIGURAZIONE["gall_crop_posizione"] == "sinistra") { $sh = -($ht-$miniaturaH) / 2; $sw = 0; } else if ($CONFIGURAZIONE["gall_crop_posizione"] == "destra") { $sh = -($ht-$miniaturaH) / 2; $sw = -($wt-$miniaturaW); } imagecopyresampled ( $tmp_t, $immo, $CONFIGURAZIONE["gall_min_force_x"]==="NO"?$sw:$CONFIGURAZIONE["gall_min_force_x"], $CONFIGURAZIONE["gall_min_force_y"]==="NO"?$sh:$CONFIGURAZIONE["gall_min_force_y"], 0 + $CONFIGURAZIONE["gall_xoffset"], 0 + $CONFIGURAZIONE["gall_yoffset"], $wt, $ht, $immow, $immoh ); //imagejpeg($tmp_t,$nome_out_t."a.jpg",75); //sommo per il bordo se c'e' if($bordoRes && $tmp_t) imagecopy ($tmp_t, $bordoRes,0,0,0,0,$miniaturaW, $miniaturaH); if($maschera){ imagealphablending( $tmp_t, false ); imagesavealpha( $tmp_t, true ); // imagecopy($tmp_t, $maschera,0,0,0,0,$miniaturaW, $miniaturaH); for( $x = 0; $x < $miniaturaW; $x++ ) { for( $y = 0; $y < $miniaturaH; $y++ ) { $alpha = imagecolorsforindex( $maschera, imagecolorat( $maschera, $x, $y ) ); $alpha = 127 - floor( $alpha[ 'red' ] / 2 ); $color = imagecolorsforindex( $tmp_t, imagecolorat( $tmp_t, $x, $y ) ); imagesetpixel( $tmp_t, $x, $y, imagecolorallocatealpha( $tmp_t, $color[ 'red' ], $color[ 'green' ], $color[ 'blue' ], $alpha ) ); } } } } else { //non croppo e non considero il bordo, ma semplicemente ridimensiono l' immagine iscrivendola // in un rettangolo delle dimensioni specificate // Imposto i valori massimi di larghezza e altezza /*$wt = $CONFIGURAZIONE["gall_min_w"]; $ht = $CONFIGURAZIONE["gall_min_h"]; if ($wt && ($immow < $immoh)) { $wt = ($ht / $immoh) * $immow; } else { $ht = ($wt / $immow) * $immoh; }*/ $percent1 = $immow / $CONFIGURAZIONE["gall_min_w"]; $percent2 = $immoh / $CONFIGURAZIONE["gall_min_h"]; $percent = max($percent1,$percent2); //trovo dimensioni immagine $ht = round($immoh / $percent); $wt = round($immow / $percent); $w_fill = $CONFIGURAZIONE["gall_min_w"]; $h_fill = $CONFIGURAZIONE["gall_min_h"]; if($CONFIGURAZIONE["gall_resize_furbo_min"] == "SI") { if($immow < $CONFIGURAZIONE["gall_min_w"] and $immoh < $CONFIGURAZIONE["gall_min_h"] ) { $w_fill = $wt = $immow; $h_fill = $ht = $immoh; } } // Ridimensiono $offx = 0; $offy = 0; if ($CONFIGURAZIONE["gall_fill"] == "SI") { $tmp_t = imagecreatetruecolor($w_fill, $h_fill); //se non specificato colore del fill o alfa provo check canale alpha $checkAlpha = false; if ((!$CONFIGURAZIONE["gall_fill_color"] && !$CONFIGURAZIONE["gall_fill_alpha"]) || $CONFIGURAZIONE["gall_fill_alpha"] === "AUTO") { $checkAlpha = true; } if (!$CONFIGURAZIONE["gall_fill_color"]) $CONFIGURAZIONE["gall_fill_color"] = "FFFFFF"; $int = hexdec($CONFIGURAZIONE["gall_fill_color"]); $arr = array("red" => 0xFF & ($int >> 0x10), "green" => 0xFF & ($int >> 0x8), "blue" => 0xFF & $int); $coloreAplha = false; if (!$checkAlpha && $CONFIGURAZIONE["gall_fill_alpha"]) { $coloreAplha = true; } else { if ($checkAlpha) { $imagick = new imagick($originale); if ($imagick->getImageAlphaChannel()) { $coloreAplha = true; } } } if ($coloreAplha) { $color = imagecolorallocatealpha($tmp_t, $arr["red"], $arr["green"], $arr["blue"], 127); } else { $color = imagecolorallocate($tmp_t, $arr["red"], $arr["green"], $arr["blue"]); } imagefill($tmp_t, 0, 0, $color); $offx = ($w_fill - $wt) / 2; $offy = ($h_fill - $ht) / 2; } else { $tmp_t = imagecreatetruecolor($wt, $ht); } if($imm_tipo == "png") { if($CONFIGURAZIONE['indi_subversion'] < 5 ) { $white_tmp_t = imagecolorallocate($tmp_t, 255, 255, 255 ); imagefill($tmp_t,0,0,$white_tmp_t); } else { imageSaveAlpha($tmp_t, true); imageAlphaBlending($tmp_t, false); } } imagecopyresampled($tmp_t, $immo, $offx, $offy, 0 + $CONFIGURAZIONE["gall_xoffset"], 0 + $CONFIGURAZIONE["gall_yoffset"], $wt, $ht, $immow, $immoh); if ($CONFIGURAZIONE["gall_fill"] != "SI") { $miniaturaH = $ht; $miniaturaW = $wt; } else { $miniaturaH = $CONFIGURAZIONE["gall_min_h"]; $miniaturaW = $CONFIGURAZIONE["gall_min_w"]; } } //eventualmente scrivo qualcosa sopra se c'e' il file //$CONF["gall_min_scritta"] => "", //$CONF["gall_min_scritta_posh"] = "centro"; //$CONF["gall_min_scritta_posw"] = "centro"; //$CONF["gall_min_scritta_margine"] = "10" if($CONFIGURAZIONE["gall_min_scritta"] != "" and is_file($CONFIGURAZIONE["gall_min_scritta"])) { $margine = $CONFIGURAZIONE["gall_min_scritta_margine"]; //posizione in altezza (alto|basso|centro) if($CONFIGURAZIONE["gall_min_scritta_posh"] == "") $posh = "basso"; else $posh = $CONFIGURAZIONE["gall_min_scritta_posh"]; //posizione in altezza (sinistra|basso|destra) if($CONFIGURAZIONE["gall_min_scritta_posw"] == "") $posw = "destra"; else $posw = $CONFIGURAZIONE["gall_min_scritta_posw"]; $gall_min_scritta = @imagecreatefrompng($CONFIGURAZIONE["gall_min_scritta"]); $scrittaw = imagesx($gall_min_scritta); $scrittah = imagesy($gall_min_scritta); //posizione orizzontale //$posw = $w/2-($scrittaw/2); //CENTRO IN BASSO if($posw == "destra") $posw = $miniaturaW-$scrittaw-$margine; if($posw == "centro") $posw = $miniaturaW/2-($scrittaw/2); if($posw == "sinistra") $posw = $margine; //posizione verticale if($posh == "alto") $posh = $margine; if($posh == "centro") $posh = $miniaturaH/2-($scrittah/2); if($posh == "basso") $posh = ($miniaturaH-$scrittah-$margine); imageAlphaBlending($tmp_t, true);//se l'immagine originale è una png può venire lo sfondo della scritta bianco invece che trasparente imageAlphaBlending($gall_min_scritta, true); imageSaveAlpha($gall_min_scritta, true); imagecopy($tmp_t, $gall_min_scritta, $posw, $posh, 0, 0,$scrittaw, $scrittah); } //scrive la miniatura png/jpg if($CONFIGURAZIONE['indi_subversion'] > 4 ) { if($imm_tipo == "png" && !$CONFIGURAZIONE["gall_forza_output_jpeg"]) { imageinterlace($tmp_t, true); if(imagepng($tmp_t,$nomiStd["nome_t"])) if($GLOBALS["CONF"]["DEBUG"] == "SI") d_info("Creata Immagine Thumbnail:".$nomiStd["nome_t"]." Q:".$qp,"mod_galleria","INDI"); else if($GLOBALS["CONF"]["DEBUG"] == "SI") d_err("ERRORE Scrittura Imm Thumbnail:".$nomiStd["nome_t"]." Q:".$qp,"mod_galleria","INDI"); //CECCAM 18/11/2013 pngquant if ($CONFIGURAZIONE["gall_pngquant"] == "SI") { imm_quantizzo($nomiStd["nome_t"]); } } else { imageinterlace($tmp_t, true); if(imagejpeg($tmp_t,$nomiStd["nome_t"],$qp)) if($GLOBALS["CONF"]["DEBUG"] == "SI") d_info("Creata Immagine Thumbnail:".$nomiStd["nome_t"]." Q:".$qp,"mod_galleria","INDI"); else if($GLOBALS["CONF"]["DEBUG"] == "SI") d_err("ERRORE Scrittura Imm Thumbnail:".$nomiStd["nome_t"]." Q:".$qp,"mod_galleria","INDI"); } } else { imageinterlace($tmp_t, true); if(imagejpeg($tmp_t,$nomiStd["nome_t"],$qp)) if($GLOBALS["CONF"]["DEBUG"] == "SI") d_info("Creata Immagine Thumbnail:".$nomiStd["nome_t"]." Q:".$qp,"mod_galleria","INDI"); else if($GLOBALS["CONF"]["DEBUG"] == "SI") d_err("ERRORE Scrittura Imm Thumbnail:".$nomiStd["nome_t"]." Q:".$qp,"mod_galleria","INDI"); } } if($CONFIGURAZIONE['gall_webp']){ gallConvertWebp($nomiStd["nome"], $nomiWebp["nome"], $CONFIGURAZIONE["gall_q_grande"]); gallConvertWebp($nomiStd["nome_t"], $nomiWebp["nome_t"], $CONFIGURAZIONE["gall_q_miniatura"]); } $IMM['nome_g'] = $nomiFormatoRichiesto["nome"]; $IMM['nome_t'] = $nomiFormatoRichiesto["nome_t"]; if(!$CONFIGURAZIONE['gall_skip_infos'] || $CONFIGURAZIONE['gall_wh_ingrandimento']){ $IMM['hg'] = $h; $IMM['wg'] = $w; } if(!$CONFIGURAZIONE['gall_skip_infos'] || $CONFIGURAZIONE['gall_wh_miniatura']){ $IMM['ht'] = $miniaturaH; $IMM['wt'] = $miniaturaW; } if(!$CONFIGURAZIONE['gall_skip_infos']){ $IMM['ho'] = $immoh; $IMM['wo'] = $immow; } $IMM['mtime_o'] = $mtime_o; d_info("imm($originale) Fine RESIZE IMMAGINE","mod_galleria","INDI"); // $GLOBALS['stat3k']['gall_time'] += microtime(true); return $IMM; } //png quant function imm_quantizzo($src) { global $CONF; d_info("PNGQUANT ($src)","mod_galleria","INDI"); indi_log("mod_galleria: PNGQUANT ($src)","mod_galleria","INDI"); $cmd = $CONF['dir_lib'] . "/pngquant/pngquant/pngquant --force 256 " . escapeshellarg($src) . " 2>&1"; $line = exec($cmd, $output, $ret); if ($ret !== 0) { d_err("ERRORE PNGQUANT Scrittura Imm Thumbnail:".$NOME["nome_t"]." pngquant ret:$ret output:" . $output[0],"mod_galleria","INDI"); } else { $tmp = substr($src, 0, strlen($src) - 4) . "-fs8.png"; rename($tmp, $src); } } function imgToGall($testo, $gall_opts = array()){ return img2gall($testo, $gall_opts); } function img2gall($testo, $gall_opts = array()){ $GLOBALS['img2gall_opts'] = $gall_opts;//preg_replace_callback non supporto il passaggio di parametri! return preg_replace_callback('/]+)\/>/ims', 'img2gall_callback', $testo); } function img2gall_callback($match){ preg_match_all('/(\w+)="([^"]+)"/ims', $match[1], $matches, PREG_SET_ORDER); $attributes = array(); foreach($matches as $m) $attributes[$m[1]] = $m[2]; if($attributes['src'] && $attributes['height'] && $attributes['width']){ $default = array( 'gall_img'=>$attributes['src'], // 'gall_max_w'=>800, // 'gall_max_h'=>600, 'gall_min_w'=>(int)$attributes['width'], 'gall_min_h'=>(int)$attributes['height'], 'gall_agg'=>'style="'.$attributes['style'].'"', 'gall_tipo'=>'NOING', 'gall_crop'=>'SI', ); if(!$default['gall_min_w']) unset($default['gall_min_w']);// if(!$default['gall_min_h']) unset($default['gall_min_h']);// if(isset($attributes['alt'])) $default['gall_title'] = $attributes['alt']; if(isset($attributes['title'])) $default['gall_txt_miniatura'] = $attributes['title']; // print_r_tnx(array_merge($default, $GLOBALS['img2gall_opts']), $_SERVER['REMOTE_ADDR'] == '192.168.0.177') || die; return gall(array_merge($default, $GLOBALS['img2gall_opts'])); } else return $match[0]; } /* Sostituisce le immagini con tag html che trova e le ridimensiona in accordo con i parametri di configurazione del gall */ function gall_html($out, $param=array(),$responsive = 0) { //parametri default $param = array_merge(array('gall_txt_miniatura' => '{nome_sito|h} image', 'gall_min_w'=>600, 'gall_min_h'=>1200,'gall_resize_furbo_min'=>"SI", 'gall_return'=>'ARRAY', 'gall_tipo'=>'SOLOMIN', 'gall_crop'=>'NO'), $param); //sostituisco immagini con versione del gall preg_match_all('/]+>/i',$out, $result); if($result[1]) { foreach($result[1] as $k => $v){ //escludo immagni gia ottimizzate if(stristr($v,$GLOBALS['DATI']['dir_indi']."_pics") == false or $responsive == 1) { $gall = gall(array_merge($param,array('gall_img'=>$v))); if($responsive) $gall_out = ''.$gall['txt'].''; else $gall_out = $gall['img_html']; //sostituiscola versione del gall $out = str_replace($result[0][$k],$gall_out,$out); } } } return $out; } //Ruota in base alla presenza dei dati exif function gall_info_exif($filename) { //carlo: metto la chiocciola perchè a volte da' "APP1 Exif Identifier Code" return @exif_read_data($filename); } //Ruota in base alla presenza dei dati exif function gall_auto_rotate($filename,$exif=NULL) { if(!$exif) $exif = gall_info_exif($filename); if($exif && isset($exif['Orientation'])) { $orientation = $exif['Orientation']; if($orientation != 1){ $img = imagecreatefromjpeg($filename); $deg = 0; switch ($orientation) { case 3: $deg = 180; break; case 6: $deg = 270; break; case 8: $deg = 90; break; } if ($deg) { $img = imagerotate($img, $deg, 0); d_info("RUOTO IMMAGINE di $deg gradi - gall_auto_rotate($filename)","mod_galleria","INDI"); indi_log("mod_galleria: RUOTO IMMAGINE di $deg gradi - gall_auto_rotate($filename)"); } // then rewrite the rotated image back to the disk as $filename return imagejpeg($img, $filename, 95); } // if there is some rotation necessary } // if have the exif orientation info return NULL; } if(!function_exists("imagerotate")) { function imagerotate(&$srcImg, $angle, $bgcolor, $ignore_transparent = 0) { return imagerotateEquivalent($srcImg, $angle, $bgcolor, $ignore_transparent); } } /* Unfinished imagerotate replacement. ignore_transparent is, well, ignored. :) Also, should have some standard functions for 90, 180 and 270 degrees, since they are quite easy to implement faster. */ function imagerotateEquivalent(&$srcImg, $angle, $bgcolor, $ignore_transparent = 0) { function rotateX($x, $y, $theta){ return $x * cos($theta) - $y * sin($theta); } function rotateY($x, $y, $theta){ return $x * sin($theta) + $y * cos($theta); } $srcw = imagesx($srcImg); $srch = imagesy($srcImg); if($angle == 0) return $srcImg; // Convert the angle to radians $theta = deg2rad ($angle); // Calculate the width of the destination image. $temp = array ( rotateX(0, 0, 0-$theta), rotateX($srcw, 0, 0-$theta), rotateX(0, $srch, 0-$theta), rotateX($srcw, $srch, 0-$theta) ); $minX = floor(min($temp)); $maxX = ceil(max($temp)); $width = $maxX - $minX; // Calculate the height of the destination image. $temp = array ( rotateY(0, 0, 0-$theta), rotateY($srcw, 0, 0-$theta), rotateY(0, $srch, 0-$theta), rotateY($srcw, $srch, 0-$theta) ); $minY = floor(min($temp)); $maxY = ceil(max($temp)); $height = $maxY - $minY; $destimg = imagecreatetruecolor($width, $height); imagefill($destimg, 0, 0, imagecolorallocate($destimg, 0,255, 0)); // sets all pixels in the new image for($x=$minX;$x<$maxX;$x++) { for($y=$minY;$y<$maxY;$y++) { // fetch corresponding pixel from the source image $srcX = round(rotateX($x, $y, $theta)); $srcY = round(rotateY($x, $y, $theta)); if($srcX >= 0 && $srcX < $srcw && $srcY >= 0 && $srcY < $srch) { $color = imagecolorat($srcImg, $srcX, $srcY ); } else { $color = $bgcolor; } imagesetpixel($destimg, $x-$minX, $y-$minY, $color); } } return $destimg; } ?>