run(); } run_simpleimagecompressor(); add_action( 'admin_menu', 'imagecompressor_admin_menu' ); function imagecompressor_admin_menu() { add_menu_page( __('Compression','simpleimagecompressor'), __('Compression','simpleimagecompressor'), 'edit_posts', 'simpleimagecompressor.php', 'simpleimagecompressor', 'dashicons-format-gallery', 6 ); } function simpleimagecompressor() { $display_admin=1; $message=""; $configfile=dirname(__FILE__)."/config.ini"; // Restauration de toutes les sauvegardes if(isset($_GET['restoreallbackups']) && $_GET['restoreallbackups']==1) { $f=wp_upload_dir()['basedir']; $total_del=0; ?>

'

'.$nbdel." ".__('images restaurées','simpleimagecompressor').''; } // Suppresion de toutes les sauvegardes if(isset($_GET['deleteallbackups']) && $_GET['deleteallbackups']==1) { $f=wp_upload_dir()['basedir']; $total_del=0; ?>

'

.

'.$nbdel." ".__('images supprimées','simpleimagecompressor').' ('.FileSizeConvert($totaldel).')'; } //Comparaison d'images if(isset($_GET['compare'])) { $affiche_compa=1; if(isset($_GET['delete']) && $_GET['delete']==1) { $affiche_compa=0; $i=$_GET['compare']; $i2=dirname($i).'/backup_'.basename($i); if(file_exists($i2)) { unlink($i2); $message='

'.__('Fichier','simpleimagecompressor').' '.$i2.' '.__('supprimé','simpleimagecompressor').'
'; } else { $message='
'.__('Fichier','simpleimagecompressor').' '.$i2.' '.__('inexistant','simpleimagecompressor').'
'; } } if(isset($_GET['restore']) && $_GET['restore']==1) { $affiche_compa=0; $i=$_GET['compare']; $i2=dirname($i).'/backup_'.basename($i); if(file_exists($i) && file_exists($i2)) { unlink($i); copy($i2,$i); unlink($i2); $message='
'.__('Fichier','simpleimagecompressor').' '.$i.' '.__('restauré','simpleimagecompressor').'
'; } else { $message='
'.__('Fichier','simpleimagecompressor').' '.$i.' '.__('ou','simpleimagecompressor').' '.$i2.' '.__('inexistant','simpleimagecompressor').'
'; } } if($affiche_compa==1) { $i=$_GET['compare']; if(file_exists($i)) { $i2=dirname($i).'/backup_'.basename($i); $display_admin=0; $dimensions=getimagesize($i); $largeur_ecran=$dimensions[0]; $hauteur_ecran=$dimensions[1]; if($largeur_ecran>1024) { $hauteur_ecran=1024/$largeur_ecran*$hauteur_ecran; $largeur_ecran=1024; } ?>

Comparaison de )




'.__('Fichier','simpleimagecompressor').' '.$i.' '.__('inexistant','simpleimagecompressor').''; } } } // Sauvegarde et chargement Paramètres if(isset($_GET['factor']) && isset($_GET['maxsize'])) { unlink($configfile); $inf=fopen($configfile,"w"); $factor=$_GET['factor']; $maxsize=$_GET['maxsize']; $backup=($_GET['backup']=="on"); fputs($inf,$factor.";".$maxsize.";".$backup); fclose($inf); } else { $inf=fopen($configfile,"r"); if($inf) { $cont=trim(fread($inf,4096)); $tmp=explode(";",$cont); $factor=$tmp[0]; $maxsize=$tmp[1]; $backup=$tmp[2]; } else { $factor=5; $maxsize=2560; $backup=false; $inf=fopen($configfile,"w"); fputs($inf,$factor.";".$maxsize.";".$backup); fclose($inf); } } // Lancement compression globale if(isset($_GET['compressall']) && $_GET['compressall']==1) { $display_admin=0; simpleimagecompressor_all($factor,$maxsize,$backup); } // Configuration if($display_admin==1) { ?>

" />






'.$f.' ('.__('Facteur de compression','simpleimagecompressor').': '.$factor.', '.__('taille maximale','simpleimagecompressor').': '.$maxsize.')'; ?>

.

'.$dim_fin[0].'x'.$dim_fin[1]; } $total_fin+=filesize($i); ?>
#

:
:
-%

$maxsize || $dimensions[1]>$maxsize) { $l=$dimensions[0]; $h=$dimensions[1]; if($l>$h) { $targetl=$maxsize; $targeth=$maxsize/$l*$h; } else { $targeth=$maxsize; $targetl=$maxsize/$h*$l; } switch($mimetype) { case "image/jpeg": $source = imagecreatefromjpeg($i); break; case "image/png": $source = imagecreatefrompng($i); break; case "image/gif": $source = imagecreatefromgif($i); break; } $thumb = imagecreatetruecolor($targetl, $targeth); imagecopyresized($thumb, $source, 0, 0, 0, 0, $targetl, $targeth, $l, $h); switch($mimetype) { case "image/jpeg": imagejpeg($thumb,$i); break; case "image/png": imagepng($thumb,$i); break; case "image/gif": imagegif($thumb,$i); break; } } copy($i,$i2); $comparaison=""; if($backup) { $i3=dirname($i)."/backup_".basename($i); copy($i,$i3); $comparaison=' ..'; } $setting = array( 'directory' => dirname($i), // directory file compressed output 'file_type' => array( // file format allowed 'image/jpeg', 'image/png', 'image/gif' ) ); //$ImgCompressor = new ImgCompressor($setting); $ImgCompressor = new wpcompressor($setting); switch($mimetype) { case "image/jpeg": $result = $ImgCompressor->run($i2, 'jpg', $factor); break; case "image/png": $result = $ImgCompressor->run($i2, 'png', $factor); break; case "image/gif": $result = $ImgCompressor->run($i2, 'gif', $factor); break; } if($taille_init==0) { $taille_init=$result['data']['original']['size']; } $taille_fin=$result['data']['compressed']['size']; $retour=FileSizeConvert($taille_init).'->'.FileSizeConvert($taille_fin)." -".intval(100-($taille_fin/$taille_init)*100)."%"; $text=''.__('Image déjà optimisée','simpleimagecompressor').'.'; $color=""; if($taille_fin<$taille_init) { copy($result['data']['compressed']['image'],$i); $total_init+=$taille_init; $total_fin+=$taille_fin; $color=' style="color:green;" '; $text=$retour.$comparaison; } else { $total_init+=$taille_init; $total_fin+=$taille_init; } unlink($i2); unlink($result['data']['compressed']['image']); return ''.$text.''; } function FileSizeConvert($bytes) { $bytes = floatval($bytes); $arBytes = array( 0 => array( "UNIT" => "TB", "VALUE" => pow(1024, 4) ), 1 => array( "UNIT" => "GB", "VALUE" => pow(1024, 3) ), 2 => array( "UNIT" => "MB", "VALUE" => pow(1024, 2) ), 3 => array( "UNIT" => "KB", "VALUE" => 1024 ), 4 => array( "UNIT" => "B", "VALUE" => 1 ), ); foreach($arBytes as $arItem) { if($bytes >= $arItem["VALUE"]) { $result = $bytes / $arItem["VALUE"]; $result = str_replace(".", "," , strval(round($result, 2)))." ".$arItem["UNIT"]; break; } } return $result; } // Optimisation au chargement // define the wp_generate_attachment_metadata callback function filter_wp_generate_attachment_metadata( $metadata, $attachment_id ) { $configfile=dirname(__FILE__)."/config.ini"; $inf=fopen($configfile,"r"); $factor=5; $maxsize=2560; $backup=false; if($inf) { $cont=trim(fread($inf,4096)); $tmp=explode(";",$cont); $factor=$tmp[0]; $maxsize=$tmp[1]; $backup=$tmp[2]; } $images=array(); $mainimg=wp_upload_dir()['basedir']."/".$metadata['file']; optimize_image($mainimg,$factor,$maxsize,$backup); $dimensions=getimagesize($mainimg); $metadata['width']=$dimensions[0]; $metadata['height']=$dimensions[1]; foreach($metadata['sizes'] as $key=>$i) { $img=$metada['file']['path']."/".$i['file']; optimize_image($img,$factor,$maxsize,$backup); $dimensions=getimagesize($img); $metadata['sizes'][$key]['width']=$dimensions[0]; $metadata['sizes'][$key]['height']=$dimensions[1]; } return $metadata; }; // add the filter add_filter( 'wp_generate_attachment_metadata', 'filter_wp_generate_attachment_metadata', 10, 2 ); class wpcompressor { function __construct($setting) { $this->setting = $setting; } function run($image, $c_type, $level = 0) { $img_info = getImageSize($image); $img_name = basename($image); $img_type = $img_info['mime']; $img_size = filesize($image); // result $result = array(); // cek & ricek if(in_array($c_type, array('jpeg','jpg','JPG','JPEG','gif','GIF','png','PNG'))) { // jpeg, png, gif only if(in_array($img_type, $this->setting['file_type'])){ if($level >= 0 && $level <= 9){ $result['status'] = 'success'; $result['data'] = $this->create($image, $img_name, $img_type, $img_size, $c_type, $level); }else{ $result['status'] = 'error'; $result['message'] = 'Compression level: from 0 (no compression) to 9'; } }else{ $result['status'] = 'error'; $result['message'] = 'Failed file type'; } }else{ $result['status'] = 'error'; $result['message'] = 'Failed file type'; } return $result; } private function check_transparent($img) { $width = imagesx($img); // Get the width of the image $height = imagesy($img); // Get the height of the image // We run the image pixel by pixel and as soon as we find a transparent pixel we stop and return true. for($i = 0; $i < $width; $i++) { for($j = 0; $j < $height; $j++) { $rgba = imagecolorat($img, $i, $j); if(($rgba & 0x7F000000) >> 24) { return true; } } } // If we dont find any pixel the function will return false. return false; } private function create($image, $name, $type, $size, $c_type, $level) { $img_name = time().$name; $img_output = $this->setting['directory'].'/'.$img_name; $img_ex = explode('.', $img_output); // get file extension // create image if($type == 'image/jpeg'){ $im = imagecreatefromjpeg($image); // create image from jpeg }else if($type == 'image/gif'){ $im = imagecreatefromgif($image); // create image from gif }else{ $im = imagecreatefrompng($image); // create image from png (default) } // compree image if(in_array($c_type, array('jpeg','jpg','JPG','JPEG'))){ $img_name = str_replace(end($img_ex), 'jpg', $img_name); // replace file extension $img_output = str_replace(end($img_ex), 'jpg', $img_output); // replace file extension if(!empty($level)){ imagejpeg($im, $img_output, 100 - ($level * 10)); // if level = 2 then quality = 80% }else{ imagejpeg($im, $img_output, 100); // default quality = 100% (no compression) } $im_type = 'image/jpeg'; }else if(in_array($c_type, array('gif','GIF'))){ $img_name = str_replace(end($img_ex), 'gif', $img_name); // replace file extension $img_output = str_replace(end($img_ex), 'gif', $img_output); // replace file extension if($this->check_transparent($im)) { // Check if image is transparent imageAlphaBlending($im, true); imageSaveAlpha($im, true); imagegif($im, $img_output); } else { imagegif($im, $img_output); } $im_type = 'image/gif'; }else if(in_array($c_type, array('png','PNG'))){ $img_name = str_replace(end($img_ex), 'png', $img_name); // replace file extension $img_output = str_replace(end($img_ex), 'png', $img_output); // replace file extension if($this->check_transparent($im)) { // Check if image is transparent imageAlphaBlending($im, true); imageSaveAlpha($im, true); imagepng($im, $img_output, $level); // if level = 2 like quality = 80% } else { imagepng($im, $img_output, $level); // default level = 0 (no compression) } $im_type = 'image/png'; } // image destroy imagedestroy($im); // output original image & compressed image $im_size = filesize($img_output); $data = array( 'original' => array( 'name' => $name, 'image' => $image, 'type' => $type, 'size' => $size ), 'compressed' => array( 'name' => $img_name, 'image' => $img_output, 'type' => $im_type, 'size' => $im_size ) ); return $data; } }