Commit ef4b4cee authored by Zéfling's avatar Zéfling
Browse files

Version 0.8.3

parents
<?php
$cache = array (
);
?>
\ No newline at end of file
<?php
?>
\ No newline at end of file
favicon.png

409 Bytes

<?php
/*
########################################################################################################
Célian VEYSSIÈRE - Septembre 2009 ~ Novembre 2012
Licence : voir licence.txt
########################################################################################################
*/
/**
* retourne un tableau multidimentionnel sous forme « texte PHP » et en arbre
* @param nom Nom du tableau : $nom = array();
* @param $tab Tableau à sérialiser en code PHP.
*/
function array_tostring($nom, $tab) {
if (is_array($tab)) {
return "\${$nom} = array (\n"
. array_tostring_parse($tab)
. "\n);";
} else {
return false;
}
}
function array_tostring_parse($tab, $n = 0) {
$_tab = "\t";
if (is_array($tab)) {
$text = '';
foreach($tab as $key => $val) {
$text .= str_repeat ($_tab,$n+1).(is_numeric($key) ? $key : "'".addqslashes($key, "'")."'")." => ";
if (is_array($val)) {
$text .= "array (\n".array_tostring_parse($val, $n+1).
str_repeat ($_tab,$n+1)."),\n";
} else {
$text .= (is_numeric($val) ? $val : "'".addqslashes($val, "'")."'").",\n";
}
}
return $text;
}
}
/**
* test s'il s'agit d'une image
*/
function is_image ($ficher) {
return @getimagesize($ficher) !== false;
/*return is_file($ficher) &&
in_array(pathinfo(strtolower($ficher), PATHINFO_EXTENSION), array('jpg', 'jpeg', 'png', 'gif'));*/
}
/**
* Encodage HTML pour préotéger les formulaires HTML
*/
function htmlEncodeChar($texte) {
$texte = str_replace('&', '&amp;', $texte);
$texte = str_replace('"', '&quot;', $texte);
$texte = str_replace('\'', '&apos;', $texte);
$texte = str_replace('<', '&lt;', $texte);
$texte = str_replace('>', '&gt;', $texte);
$texte = str_replace('&amp;#', '&#', $texte); // correction pour caractères unicodes html
return $texte;
}
/**
* Suppression des caractères non système
*/
function fileChar($texte) {
$texte = str_replace('?', '', $texte);
$texte = str_replace(':', '-', $texte);
return $texte;
}
/**
* ajouter des slashes
* @param string $texte texte à protéger
* @param string $quote caractère à protéger : ' ou " (defaut : ' )
* @return chaine protégé
*/
function addqslashes($texte, $quote = "'") {
if (get_magic_quotes_gpc()) {
$texte = str_replace('\\', '\\\\\\\\', $texte);
if ($quote == "'") {
$texte = str_replace("'", "\\\\'", $texte);
} else if ($quote == '"') {
$texte = str_replace('"', '\\\\"', $texte);
}
} else {
$texte = str_replace('\\', '\\\\', $texte);
if ($quote == "'") {
$texte = str_replace("'", "\\'", $texte);
} else if ($quote == '"') {
$texte = str_replace('"', '\\"', $texte);
}
}
return $texte;
}
/**
* Génération d'un select
*/
function htmlSelect ($tab, $selectionne, $name, $defaut = null, $css = '') {
$select = '';
if (!empty($tab) && is_array($tab)) {
$select .= "<select name=\"$name\" id=\"$name\" style=\"$css\">";
if ($defaut != null) {
$select .= "<option value=\"{$defaut[0]}\">".$defaut[1]."</option>";
}
foreach ($tab as $key => $val) {
if (!is_array($val)){
$selected = ($key == $selectionne) ? 'selected' : '';
$select .= "<option value=\"$key\" $selected>".htmlEncodeChar($val)."</option>";
} else {
$select .= "<optgroup label=\"".htmlEncodeChar($key)."\">";
foreach ($val as $subkey => $subval) {
$selected = ($subkey == $selectionne) ? 'selected' : '';
$select .= "<option value=\"$subkey\" $selected>".htmlEncodeChar($subval)."</option>";
}
$select .= "</optgroup>";
}
}
$select .= "</select>";
}
return $select;
}
/*
* corrige espace et underscore
*/
function correction ($nom, $espace = false, $underscore = false, $trim = false) {
if ($trim) {
$nom = trim($nom);
}
if ($espace) {
while (strpos($nom, ' ') !== false) {
$nom = str_replace(' ', ' ', $nom);
}
}
if ($underscore) {
$nom = str_replace(' ', '_', $nom);
}
if ($espace && $underscore) {
while (strpos($nom, '__') !== false) {
$nom = str_replace('__', '_', $nom);
}
}
return $nom;
}
/**
* Sauvegarde dans une format de fichier spécialique
*/
function sauve ($nom_fichier, $chaine, $format = null) {
if ($format == CODE_PHP) $chaine =<<<PHP
<?php
$chaine
?>
PHP;
if ($format == CODE_XHTML) $chaine =<<<XHTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Rendu HTML</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
$chaine
</body>
XHTML;
$fichier = fopen($nom_fichier, 'w+');
fwrite($fichier, $chaine);
fclose($fichier);
}
function progression ($val) {
if (isset($_POST['progression_id'])) {
try {
$fichier = @fopen(_DIR_TMP.DIRECTORY_SEPARATOR.$_POST['progression_id'], 'w+');
@fwrite($fichier,$val);
@fclose($fichier);
} catch (Exception $e) {
// Si erreur, ne rien faire
}
}
}
/**
* $valeur : valeur a afficher
* $min : valeur minimal
* $max : valeur max
* $taille : largeur total en pixel
*/
function barometre($valeur, $min, $max, $taille) {
$valeurTmp = ($valeur < $min) ? $min : (($valeur > $max) ? $max : $valeur);
$rempli = round(($valeurTmp-$min)/($max-$min)*$taille);
$reste = $taille-$rempli;
return '<div class="barometre"><span style="padding-left:'.$rempli.'px;"></span><span style="padding-left:'.$reste.'px;"></span></div>'
.'<div class="barometre">'.$valeur.'</div>';
}
function diff_temp (array $tab) {
return $tab[1]-$tab[0];
}
function taille ($taille, $nombre = 5) {
if ($taille < 1024) {
$taille .= ' o';
} else if ($taille < 1024*1024) {
$taille = ($taille/1024);
$taille = substr($taille, 0, $nombre);
if (substr($taille, -1, 1) == '.') $taille = substr($taille, 0, -1);
$taille .= ' Kio';
} else if ($taille < 1024*1024*1024) {
$taille = ($taille/(1024*1024));
$taille = substr($taille, 0, $nombre);
if (substr($taille, -1, 1) == '.') $taille = substr($taille, 0, 1);
$taille .= ' Mio';
} else {
$taille = ($taille/(1024*1024*1024));
$taille = substr($taille, 0, $nombre);
if (substr($taille, -1, 1) == '.') $taille = substr($taille, 0, 1);
$taille .= ' Gio';
}
if (strpos(',', $taille) == $nombre) $taille = substr($taille, 0, $nombre).substr($taille, $nombre+1);
return str_replace('.', ',', $taille);
}
function taille2 ($taille, $decimal = 2) {
$unités = array('o','kio','Mio','Gio','Tio','Pio');
$taille = @round($taille/pow(1024, ($i = floor(log($taille,1024))) ), $decimal);
return str_replace('.', ',',$taille).' '.$unités[$i];
}
function decimale ($nombre, $nbr_decimal = 2) {
if (strpos($nombre, '.') !== false && $nbr_decimal > 0) {
list($N, $D) = explode('.', $nombre);
return $N.SEPARATEUR_DECIMAL.substr($D, 0, $nbr_decimal).
($nbr_decimal-strlen($D) > 0 ? str_repeat(0, $nbr_decimal-strlen($D)) : '');
} else {
return $nombre;
}
}
/**
function de trie par nom (ordre naturel) ou date
*/
function trier_nom ($a, $b) {
return strnatcasecmp ($a['chemin'], $b['chemin']);
}
function trier_date ($a, $b) {
return ($a['date'] < $b['date']) ? -1 : ($a['date'] == $b['date']) ? 0 : 1;
}
function numerique($nom, array $nombreChiffre, array $nombre) {
for ($i = 1; $i <= NOMBRE_NUM; $i++) {
$clef = ':num'.$i.':';
if (strpos($nom, $clef) !== false) {
$nom = sprintf(str_replace($clef, '%0'.$nombreChiffre[$i].'d', $nom), $nombre[$i]);
}
}
return $nom;
}
<?php
/*
########################################################################################################
Célian VEYSSIÈRE - Septembre 2009 ~ Avril 2012
Licence : voir licence.txt
########################################################################################################
*/
// pour la position de le découpe.
define('CENTRER', '50');
define('HAUT', '0');
define('BAS', '100');
define('DROITE', '0');
define('GAUCHE', '100');
class Image {
public $nom = '';
public $nom_base_source = '';
public $nom_base_cible = '';
public $nom_ext_source = '';
public $nom_ext_cible = '';
public $nom_ext_save = true;
public $dir_source = '';
public $dir_cible = '';
// Dimension sources
public $width_source = 0;
public $height_source = 0;
// Dimensions cibles
public $width_cible = 0;
public $height_cible = 0;
public $redimension = false;
public $coeff_reduction_h = 1;
public $coeff_reduction_v = 1;
// Découpe
public $width_decoupe = 0;
public $height_decoupe = 0;
public $vertical_align = CENTRER;
public $horizontal_align = CENTRER;
public $decoupe = false;
public $types = array('', 'gif', 'jpeg', 'png', 'swf');
public $mines = array(
'gif' => 'image/gif',
'jpg' => 'image/jpeg',
'jpeg'=> 'image/jpeg',
'png' => 'image/png'
);
public $mime = '';
public $qualite = 95;
public $translation = false;
public $top = 0;
public $left = 0;
public $type = '';
/** possible : etire, ratio, 16:9 */
public $ratio_format = 'etirer';
public $ratio = false;
public function __construct ($nom, $dossier = '') {
$this->nom = $nom;
$info = getimagesize((!empty($dossier) ? $dossier.DIRECTORY_SEPARATOR : '').$nom);
$this->width_source = $this->width_cible = $info[0];
$this->height_source = $this->height_cible = $info[1];
$this->type = $this->types[$info[2]];
$this->mime = $info['mime'];
$info = pathinfo((!empty($dossier) ? $dossier.DIRECTORY_SEPARATOR : '').$nom);
$this->dir_source = $this->dir_cible = $info['dirname'];
$this->nom_base_source = $this->nom_base_cible = $info['filename'];
$this->nom_ext_source = $this->nom_ext_cible = $info['extension'];
}
public function dir_cible ($dir) {
if(is_dir($dir)) $this->dir_cible = $dir;
}
public function nom_cible ($nom, $ext = true) {
if(!empty($nom)) {
$this->nom_base_cible = $nom;
$this->nom_ext_save = $ext;
}
}
public function ext_cible ($ext) {
if(!empty($ext)) $this->nom_ext_cible = $ext;
}
public function ratio($ratio) {
if(!empty($ratio)) $this->ratio_format = $ratio;
}
public function decouper_special ($format) {
switch ($format) {
case '480p 16:9' :
$this->decouper_cible ( 854, 480);
break;
case '720p 16:9' :
$this->decouper_cible (1280, 720);
break;
case '1080p 16:9' :
$this->decouper_cible (1920, 1080);
break;
}
}
/**
* La redimension doit être faire après, sinon le découpage n'est pas pris en compte
* Le découpe se fait sur la source, et non la cible.
*/
public function decouper_cible ($width, $height) {
if ($width > 0 && $height > 0) {
$this->decoupe = true;
$this->width_decoupe = $width;
$this->height_decoupe = $height;
}
}
public function dimension_special ($format) {
$this->redimension = true;
switch ($format) {
case '480p 16:9' :
$this->ratio_format = "16:9";
$this->dimension_cible ( 854, 480, false);
break;
case '720p 16:9' :
$this->ratio_format = "16:9";
$this->dimension_cible (1280, 720, false);
break;
case '1080p 16:9' :
$this->ratio_format = "16:9";
$this->dimension_cible (1920, 1080, false);
break;
}
}
public function dimension_cible ($width, $height, $ratio = true, $ratio_val = null) {
if ($width > 0 && $height > 0) {
$height_coef = $this->height_source;
$width_coef = $this->width_source;
$this->redimension = true;
// en respectant le ration de l'image
if ($ratio || $this->ratio_format == 'ratio') {
if ($width <= $width_coef || $height <= $height_coef) {
if ( ($width / $width_coef) > ($height / $height_coef) ) {
$this->width_cible = round( $width_coef / $height_coef * $height );
$this->height_cible = $height ;
} else {
$this->width_cible = $width;
$this->height_cible = round( $height_coef / $width_coef * $width );
}
}
}
// format 16:9
else if ($this->ratio_format == '16:9') {
$this->width_cible = $width;
$this->height_cible = round ($width * 9 / 16) ;
}
// specifique
else if ($ratio_val !== null) {
$this->width_cible = $width;
$this->height_cible = round ($width * $ratio_val) ;
}
// étirer
else {
$this->width_cible = $width;
$this->height_cible = $height;
}
}
}
public function dimension_pourcent_cible($percentage = 100) {
$this->redimension = true;
if($percentage > 0) {
$this->dimension_cible (
round($this->width_source*($percentage/100)),
round($this->height_source*($percentage/100))
);
}
}
public function translation($top = 0, $left = 0) {
$this->translation = true;
if (is_numeric($top)) $this->top = $top;
if (is_numeric($left)) $this->left = $left;
}
public function qualite($qualite = 95) {
if (is_numeric($qualite)) $this->qualite = $qualite;
if($this->qualite > 100) $this->qualite = 100;
if($this->qualite < 0) $this->qualite = 0;
}
public function afficher() {
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Type: '.$this->mines[strtolower($this->nom_ext_cible)]);
$this->generer(null);
}
public function copie () {
return copy (
$this->dir_source.DIRECTORY_SEPARATOR.$this->nom,
$this->adresse_finale()
);
}
public function sauver () {
$this->generer($this->adresse_finale());
}
private function adresse_finale() {
return $this->dir_cible.DIRECTORY_SEPARATOR.str_replace(':', '-',$this->nom_base_cible).(
$this->nom_ext_save ?
'.'.$this->nom_ext_cible :
''
);
}
private function generer($nom) {
$image = null;
switch ($this->mime) {
case 'image/jpeg' :
case 'image/pjpeg': $image = imagecreatefromjpeg($this->dir_source.DIRECTORY_SEPARATOR.$this->nom_base_source.'.'.$this->nom_ext_source); break;
case 'image/png' : $image = imagecreatefrompng ($this->dir_source.DIRECTORY_SEPARATOR.$this->nom_base_source.'.'.$this->nom_ext_source); break;
case 'image/gif' : $image = imagecreatefromgif ($this->dir_source.DIRECTORY_SEPARATOR.$this->nom_base_source.'.'.$this->nom_ext_source); break;
}
if($image != null) {
if ($this->decoupe) {
// échantionne
if ($this->redimension) {
switch ($this->ratio_format) {
case 'etirer' :
case '16:9' :
$height_cible = $this->height_source * $this->height_cible / $this->height_decoupe;
$width_cible = $this->width_source * $this->width_cible / $this->width_decoupe;
$dim_height = $this->height_cible;
$dim_width = $this->width_cible;
break;
case 'ratio' :
default :
$height_cible = $this->height_cible;
$width_cible = $this->width_cible;
$dim_height = $this->height_decoupe * $this->height_cible / $this->height_source;
$dim_width = $this->width_decoupe * $this->width_cible / $this->width_source;
break;
}
$this->top = ($height_cible - $dim_height) / -2;
$this->left = ($width_cible - $dim_width ) / -2;
} else {
$dim_width = $this->width_decoupe;
$dim_height = $this->height_decoupe;
$width_cible = $this->width_cible;
$height_cible = $this->height_cible;
$this->left = ($this->width_decoupe - $this->width_cible ) / 2;
$this->top = ($this->height_decoupe - $this->height_cible) / 2;
}
} else {
// redimension
$dim_width = $width_cible = $this->width_cible;
$dim_height = $height_cible = $this->height_cible;
}
if ($dim_width > 0 && $dim_height > 0) {
$dest = imagecreatetruecolor($dim_width, $dim_height);
if ($this->width_cible != $this->height_cible || $this->width_source != $this->height_source || ($this->width_decoupe > 0 && $this->height_decoupe > 0)) {
// redimensionner
imagecopyresampled (
$dest, $image,
$this->left, $this->top,
0, 0,
$width_cible, $height_cible,
$this->width_source, $this->height_source
);
}
switch (strtolower($this->nom_ext_cible)) {
case 'jpeg' :
case 'jpg' : imagejpeg($dest, $nom, $this->qualite); break;
case 'png' : imagepng ($dest, $nom); break;
case 'gif' : imagegif ($dest, $nom); break;
}
imagedestroy($image);
imagedestroy($dest);
return true;
} else {
return false;
}
}
}
##### STATIC ############################################################"
public static function affiche_fichier ($adresse) {
$info = getimagesize($adresse);
header('Content-Type: '.$info['mime']);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($adresse));
ob_clean();