Vous n'êtes pas identifié(e).
Bonjour
J’ai de nouveau un problème avec mon copain (dont j'ai parlé dans un autre post)
Il continu a uploader des images qui sont 3 fois plus grosse que l'utilisation final.
Je me suis dit que j'allais lui installer "une parade"
Question :
L'un d'entre vous aurait-il sous la main (ou aurait-il adapté pour Zite+) un script qui redimensionne "automatiquement" les images, dans le style de ce que fait Wordpress par exemple !
Un script qui permet d'uploader une seule dimension pourrait même me convenir, je ferais la page avec des cases à cocher avec les dimensions utiles.
J'avais trouvé ca :
http://www.commentcamarche.net/forum/af … -un-upload
Mais je n'arrive pas à l'adapter
Christian
Hors ligne
Bonsoir,
Une autre solution: tu utilises une version dérivée de mon script pour générer les miniatures.
C'est dans le fichier tdocsadmin.php (du répertoire ziteplus)
La fonction c'est makethumb().
Il faut juste:
- dupliquer la fonction (en attendant une prochaine version paramétrable)
- modifier la valeur 100 (pixels;)) qui est en dure dans le source
- changer le nom du fichier de destination: $imgthumb et mettre l'image d'origine ($imgname)
Cela devrait marcher.
a+
Jean-Paul
ps: en bonus, le script conserve la transparence des images
Hors ligne
Bonsoir
Merci jpg pour cette réponse rapide
1) cela m'a l'air d'être une trés bonne idée !
2) du coup j'ai regardé le dossier thumbs que je n'avais pas nettoyé la première fois !! GGGGrrrr
Il y a une commande pour relancer la création des thumbs, si je les vire tous ?
J'ai vu un dojob dans selectdoc.php, mais je ne vois pas comment le lancer !
3) J'essaie ton idée dans la semaine.
Christian
Hors ligne
2) du coup j'ai regardé le dossier thumbs que je n'avais pas nettoyé la première fois !! GGGGrrrr
Il y a une commande pour relancer la création des thumbs, si je les vire tous ?
Oui
J'ai vu un dojob dans selectdoc.ph
Il existe la fonction: makethumbs() {//générer les miniatures de tous les fichiers images qui ont changés
mais le plus simple pour l'executer depuis ton site, il faut être logué en admin et lancer: http://tonsite/?z=selectdoc|go
Enfin je crois , c'est de mémoire
Tu peux avoir un timeout du script si tu as beaucoup d'image. soit tu règles le timeout, soit tu relance plusieus fois la génération jusqu'a traiter tous les fichiers
Tiens, ça me fait penser que si tu lance via tinymce le tinybrowwser à la sauce ziteplus, ça va aussi recréer les miniatures qui manquent
a+
Jean-Paul
Hors ligne
Bonjour
Merci jpg, la commande ?z=selectdoc|go fonctionne très bien !
et makethumbs() que j'ai modifié et que je viens de tester en interne me donne satisfaction
Je vais la mettre en place et voir quel problème je rencontre avec en utilisation normal.
Si cela intéresse je la mettrais à dispo
Christian
Hors ligne
Bonsoir,
J'ai essayé d'appliquer cette modification du code.
Ca fonctionne si je ne duplique pas la fonction. Mais alors je n'ai plus de miniature...
Sinon, la page reste blanche car il a un conflit entre les fonctions de même nom.
J'ai essayé des noms différents, mais je ne sais pas comment faire.
Merci pour votre aide.
Hors ligne
Bonsoir,
J'ai essayé d'appliquer cette modification du code
Laquelle exactement ?
a+
Jean-Paul
ps: tu est dans quelle version de Ziteplus ?
Hors ligne
Bonsoir,
Celle décrite plus haut:
C'est dans le fichier tdocsadmin.php (du répertoire ziteplus)
La fonction c'est makethumb().
Il faut juste:
- dupliquer la fonction (en attendant une prochaine version paramétrable)
- modifier la valeur 100 (pixels;)) qui est en dure dans le source
- changer le nom du fichier de destination: $imgthumb et mettre l'image d'origine ($imgname)
Voici: ce que j'ai modifié:
[== Indéfini ==]
if (imagesx($img)>=imagesy($img)) {
$largeur = 600; $hauteur = $largeur*imagesy($img)/imagesx($img); // paramétrer le 100 !!!
} else {
$hauteur = 600; $largeur = $hauteur*imagesx($img)/imagesy($img); // paramétrer le 100 !!!
}
$img_out = imagecreatetruecolor($largeur, $hauteur);
@imagealphablending($img_out, false);
imagecopyresampled($img_out, $img, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img), imagesy($img));
@imagesavealpha($img_out, true);
imagepng($img_out,$imgname);
imagedestroy($img);
imagedestroy($img_out);
J'utilise Ziteplus 9.2
Un grand merci
JPAul
Dernière modification par jpaul (12/01/2013 01:48:33)
Hors ligne
Bonjour,
alors pour compléter le texte: dupliquer la fonction et la renommer
cela permet de garder les miniatures: c'est la version ziteplus qui sera appeler par la gestion des documents
cela permet aussi de faire ce que tu veux de ta nouvelle fonction en appelant directement ta fonction renommée
a+
Jean-paul
Hors ligne
Bonsoir,
C'est bien ce que j'avais fait car deux fonctions ne peuvent pas porter le même nom sinon c'est, je présume, la dernière qui est prise en compte...
Je l'avais renommé : makeimages() Mais où dois-je la remettre ?
Je l'ai mise dans selectdoc qui se trouve dans le répertoire module.
[== PHP ==]
@set_time_limit(0);
$zdocs = new Tdocsadmin(self::$cms->cpath.'/docs.dta');
$zdocs->makethumbs();
$zdocs->makeimages();
unset($zdocs);
return self::$cms->msgShow('done_ok');
exit;
Mais ça ne fonctionne pas non plus.
Bien à toi
J-Paul
Dernière modification par jpaul (13/01/2013 00:27:33)
Hors ligne
Bonjour,
Dans le script que tu donnes, qu'est ce qui ne fonctionne pas ?
Peux tu aussi préciser ce que tu veux faire, cela permettra de voir si la solution proposée à Christian te convient
a+
Jean-Paul
Hors ligne
Bonjour,
Au fait, j'aimerai que lorsque l'on télécharge des photos, elles se redimensionnent automatiquement en max 600 X max 400 de haut.
Ce qui ne fonctionne pas: Il n'y a pas de redimensionnement...
Autre chose qui n'a rien à voir, je cherche également augmenter le temps de la session lors que l'on est loguer pour une mise à jour pour éviter des pages où il faut tout recommencer car on a pas enregistré régulièrement.
Bien à toi
JPaul
Dernière modification par jpaul (14/01/2013 00:02:35)
Hors ligne
Bonjour,
Mon problème vient surtout que je ne sais pas où mettre la fonction
Je l'ai mise ici, mais ça ne fonctionne pas, faut-il a mettre autre part?
Dans selectdoc.php :
[== php ==]
$zdocs = new Tdocsadmin(self::$cms->cpath.'/docs.dta');
$zdocs->makethumb();
$zdocs->makeimages();
unset($zdocs);
return self::$cms->msgShow('done_ok');
exit;
}
et j'ai rajouté ceci dans tdocsadmin.php :
[== php ==]
function makeimages() {//générer les miniatures de tous les fichiers images qui ont changés
foreach (self::$docs as $ident => $doc) {//pour chaque document
$this->makeimage($ident);
}
}
et
[== PHP ==]
function makeimage($ident,$force=false) { //Pour forcer le redimentionnement des images en 600 X 400 max.
if(isset(self::$cms)) {
$dirdoc = self::$cms->dpath.'/';
} else {
$dirdoc = dirname(__FILE__).'/../zdata/zdocs/';//substr($_SERVER['SCRIPT_FILENAME'],0,stripos($_SERVER['SCRIPT_FILENAME'],'tinymce')).'zdata/zdocs/';;
}
$dirthumb = $dirdoc.'thumbs/';
if ($this->isDocAuth($ident)&&($this->getValues($ident,cDocType)=='img')) {//de type image accessible
$docname = $this->getValues($ident,cDocFilename);
if (!file_exists($dirthumb.$docname) || (filemtime($dirthumb.$docname)<filemtime($dirdoc.$docname)) || $force ) {//Pas de miniature ou trop ancienne ou génération forcée
$imgname = $dirdoc.$docname;
$imgthumb = $dirthumb.$docname;
// list($width, $height, $type, $attr) = getimagesize("$pic");
switch($this->getValues($ident,cDocExt)) {
case 'jpg': case 'jpe': case 'jpeg':
$img = imagecreatefromjpeg($imgname);
break;
case 'png':
$img = imagecreatefrompng($imgname);
@imagealphablending($img, false);
break;
case 'gif':
$img = imagecreatefromgif($imgname);
break;
default :
break;
}
if (imagesx($img)>=imagesy($img)) {
$largeur = 600; $hauteur = $largeur*imagesy($img)/imagesx($img); // paramétrer le 100 !!!
} else {
$hauteur = 600; $largeur = $hauteur*imagesx($img)/imagesy($img); // paramétrer le 100 !!!
}
$img_out = imagecreatetruecolor($largeur, $hauteur);
@imagealphablending($img_out, false);
imagecopyresampled($img_out, $img, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img), imagesy($img));
@imagesavealpha($img_out, true);
imagepng($img_out,$imgname);
imagedestroy($img);
imagedestroy($img_out);
return true;
} else return false;
} else return false;
}
Pour ce qui est de garder ouvert la session j'ai trouvé en mettant session_unset(); en remarque:
[== Indéfini ==]
if($cs || !array_key_exists('zite_admin',$_SESSION) || $_SESSION['zite_id'] != $this->config['site_id']) {
//session_unset();
$_SESSION['zite_admin'] = 0;
$_SESSION['zite_id'] = $this->config['site_id'];
$_SESSION['showadminbar'] = false;
$_SESSION['zite_usergroup']=array();
}
Encore merci
J-Paul
Dernière modification par jpaul (14/01/2013 14:38:35)
Hors ligne
Désolé,mais pas vraiment le temps actuellement
je reviens sur ton problème (et sa solution) ce soir en principe
a+
Jean-Paul
Hors ligne
Salut
Je crois que ton problème, c'est que makeimage() travaille dans le dossier /thumbs, alors que tu veux modifier les images originales...
Faut toujours faire gaffe avec le copier-coller ! Il y a toujours une ligne qu'on oublie!
A+
Hors ligne
Non, je ne pense pas... Car ça fonctionne si je change uniquement les dimensions et la ligne :
imagepng($img_out,$imgname);
C'est juste que je ne sais pas où remettre la fonction pour pouvoir garder les vignettes.
Merci
JPaul
Hors ligne
Bonsoir,
alors tu remplaces le fichier tdocsadmin.php par celui-ci
<?php
/*
Classe: Gestion des documents
Copyright Jean-Paul GIAUSSERAND 2009-2013
Site: http://www.giausserand.fr/index.php?perma=ziteplus
Licence : CeCILL-B, http://www.cecill.info
V2.0bis - hors version standard
v2.0: Implémentation des interfaces
v1.2: utilisation isDocAuthWrite dans les fonctions internes de Tdocsadmin
v1.1: Ajout gestion des vignettes
v1.0: Création de la classe
*/
require_once dirname(__FILE__).'/tdocs.php';
//
class Tdocsadmin extends Tdocs {
protected static $cms;
public static function set_cms(zite $zp) { self::$cms = $zp; }
//
protected function _isDocAuth($docname) {
return ($this->_isDoc($docname)&&(($_SESSION['zite_admin']==2)||( (!empty(self::$docs[$docname][cDocWrite])) && array_intersect(self::$docs[$docname][cDocWrite],$_SESSION['zite_usergroup'])!= array())));
}
public function save(){//doit-être protected ?
$i=@file_put_contents(self::$filename, serialize(self::$docs), LOCK_EX );
$this->_init();
return $i;
}
/*Interface ArrayAccess*/
public function offsetSet($key, $doc) {
if (!$this->_isDoc($key)||$this->_isDocAuth($key)) {
$this->_compactDoc($key,$doc);
self::$docs[$key] = $doc;
if (!in_array($key,$this->docsR)) $this->docsR[]=$key;
}
}
public function offsetUnset($key) {
if ($this->_isDocAuth($key)) {
unset(self::$docs[$key]);
// unset($this->docsR[$key]);//à vérifier // $this->_init();
}
}
/**/
protected function _compactDoc($key,&$doc){
$change=false;
$ext = pathinfo($key); $ext = strtolower($ext['extension']);
$desc = basename($key,'.'.$ext);
$filename = strtolower($key);
if (isset($doc[cDocFilename])&&(strtolower($doc[cDocFilename])==$filename)) {unset($doc[cDocFilename]);$change=true;}
if (isset($doc[cDocDesc])&& ($doc[cDocDesc]==$desc)) {unset($doc[cDocDesc]);$change=true;}
if (isset($doc[cDocWrite]) && in_array('admin',$doc[cDocWrite])) $doc[cDocWrite]=array_diff($doc[cDocWrite],array('admin'));
if (isset($doc[cDocWrite])&&($doc[cDocWrite]==array())) {unset($doc[cDocWrite]);$change=true;}
if (isset($doc[cDocRead])&&($doc[cDocRead]==array())) {unset($doc[cDocRead]);$change=true;}
if (isset($doc[cDocRub])&&($doc[cDocRub]==array())) {unset($doc[cDocRub]);$change=true;}
if (isset($doc[cDocAuth])&&($doc[cDocAuth]=='admin')) {unset($doc[cDocAuth]);$change=true;}
if (isset($doc[cDocExt])&&($doc[cDocExt]==$ext)) {unset($doc[cDocExt]);$change=true;}
return $change;
}
/**/
public function isDocAuthWrite($docname) {
if ($this->_isDoc($docname) && (($_SESSION['zite_admin']==2)||(array_intersect((array)$this[$docname][cDocWrite],$_SESSION['zite_usergroup'])!= array()))) {
return true;
} else return false;
}
//
function removeDoc($docname) {
$this->refresh();
if ($this->isDocAuthWrite($docname)) {//v091
unset(self::$docs[$docname]);
$this->save();
}
}
function updateDoc($docname, $filename,$ext,$rub,$desc,$auth,$groupW,$groupR,$type,$date) {
$this->refresh();
$this[$docname] = array($filename,$ext,$rub,$desc,$auth,$groupW,$groupR,$type,$date);
$this->save();
$this->makethumb($docname);
}
function verifdoc(&$doc,&$ident,&$ext,&$rub,&$desc,&$auth,&$groupW,&$groupR,&$type,&$date) {
$ident = trim(stripslashes($ident));
$doc = trim(stripslashes($doc));
$ext = pathinfo($doc); $ext = strtolower($ext['extension']);
switch($ext) {
case 'jpg': case 'jpe': case 'jpeg': case 'png': case 'gif':
$type = 'img';
break;
case 'pdf': case 'txt':
$type = $ext;
break;
case 'zip': case 'Zz' : case 'tar' : case 'rar' :
$type = 'zip';
break;
case 'swf': case 'mov' : case 'flv' : case 'wmv': case 'mkv':
case 'dcr': case 'qt': case 'mpg': case 'mp4': case 'mpeg': case 'avi': case 'wm':
case 'asf': case 'asx': case 'wmx': case 'wvx': case 'rm': case 'ra': case 'ram':
$type = 'film';
break;
case 'mp3':
$type='son';
break;
default :
$type = '';
}
if (empty($ident)) {
$ident=$doc;
}
if (empty($desc)) {
$desc = basename($ident,'.'.$ext);
}
if (in_array('admin',$groupW)) {
$groupW=array_diff($groupW,array('admin'));
}
if (empty($auth)) $auth = $_SESSION['zite_user'];
if (empty($date)) $date = @date("d/m/Y");
}
function makethumb($ident,$force=false) {
if(isset(self::$cms)) {
$dirdoc = self::$cms->dpath.'/';
} else {
$dirdoc = dirname(__FILE__).'/../zdata/zdocs/';//substr($_SERVER['SCRIPT_FILENAME'],0,stripos($_SERVER['SCRIPT_FILENAME'],'tinymce')).'zdata/zdocs/';;
}
$dirthumb = $dirdoc.'thumbs/';
if ($this->isDocAuth($ident)&&($this->getValues($ident,cDocType)=='img')) {//de type image accessible
$docname = $this->getValues($ident,cDocFilename);
if (!file_exists($dirthumb.$docname) || (filemtime($dirthumb.$docname)<filemtime($dirdoc.$docname)) || $force ) {//Pas de miniature ou trop ancienne ou génération forcée
$imgname = $dirdoc.$docname;
$imgthumb = $dirthumb.$docname;
// list($width, $height, $type, $attr) = getimagesize("$pic");
switch($this->getValues($ident,cDocExt)) {
case 'jpg': case 'jpe': case 'jpeg':
$img = imagecreatefromjpeg($imgname);
break;
case 'png':
$img = imagecreatefrompng($imgname);
@imagealphablending($img, false);
break;
case 'gif':
$img = imagecreatefromgif($imgname);
break;
default :
break;
}
// retailler l'image de base si elle dépasse la taille maximun
if (imagesx($img)>=imagesy($img)) {
$largeur = 600; $hauteur = $largeur*imagesy($img)/imagesx($img);
} else {
$hauteur = 400; $largeur = $hauteur*imagesx($img)/imagesy($img);
}
$img_out = imagecreatetruecolor($largeur, $hauteur);
@imagealphablending($img_out, false);
imagecopyresampled($img_out, $img, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img), imagesy($img));
@imagesavealpha($img_out, true);
imagepng($img_out,$imgname);
imagedestroy($img_out);
// générer les vignettes
if (imagesx($img)>=imagesy($img)) {
$largeur = 100; $hauteur = $largeur*imagesy($img)/imagesx($img); // paramétrer le 100 !!!
} else {
$hauteur = 100; $largeur = $hauteur*imagesx($img)/imagesy($img); // paramétrer le 100 !!!
}
$img_out = imagecreatetruecolor($largeur, $hauteur);
@imagealphablending($img_out, false);
imagecopyresampled($img_out, $img, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img), imagesy($img));
@imagesavealpha($img_out, true);
imagepng($img_out,$imgthumb);
imagedestroy($img);
imagedestroy($img_out);
return true;
} else return false;
} else return false;
}
function makethumbs() {//générer les miniatures de tous les fichiers images qui ont changés
foreach (self::$docs as $ident => $doc) {//pour chaque document
$this->makethumb($ident);
}
}
function compact($change=false){//en cours
foreach(self::$docs as $key => &$doc) {
$change|=$this->_compactDoc($key,$doc);
}
if ($change) $this->save();
}
}
?>
Sous réserve que fluxbb garde les ' "" et autres / et \, ce code est fonctionnel.
A chaque fois que tu vas télécharger une image, individuellement ou par la gestion par lot,
si cette image dépasse 600x400 elle sera retaillée.
La génération des vignettes est préservée.
ps: Ce code est très proche de la future version alpha mis à part le paramétrage absent et une petite optimisation
a+
Jean-Paul
Hors ligne
Que dire...
Merci beaucoup, cela fonctionne très bien...
Bravo pour tout ce que tu fait...
Quand j'aurai un peu de temps j'essayerai de modifier le code pour permettre de choisir entre différents formats (600x400, 1000x600, taille original)
J-Paul
Dernière modification par jpaul (15/01/2013 00:06:41)
Hors ligne
Je viens de voir un petit bug dans le source: l'image redimensionné est systématiquement de type png, mais le type déclaré reste le type d'origine (gig, jpg ou png)
Ce sera corrigé dans la prochaine alpha.
a+
Jean-Paul
Hors ligne