ldc-dam/app/Http/Traits/MediaTools.php
Yann Gonidec 6f8786ae29 command : import des médias
front : depot de fichier, moteur de recherche
2019-07-17 15:48:23 +02:00

180 lines
5.2 KiB
PHP

<?php
namespace App\Http\Traits;
use Illuminate\Support\Facades\Storage;
trait MediaTools {
public function get_file_size($file_path) {
return $this->fix_integer_overflow(filesize($file_path));
}
public function create_thumb($media) {
$formats = $media->sujet->formats;
$mediaPath = public_path()."/".$media->folder.$media->uid.".".$media->extension;
$im = new \imagick($mediaPath);
$im->setImageBackgroundColor('#ffffff');
$im->setImageAlphaChannel(\Imagick::ALPHACHANNEL_REMOVE);
$im->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN);
$im->stripImage();
if(in_array($media->extension, array("pdf", "ai", "psd")) ){
$im->setIteratorIndex(0);
}
foreach ($formats as $format) {
$fp = public_path()."/".$media->folder.$media->uid.'_'.$format->libelle.'.'.$format->extension;
$targetWidth = $format->largeur;
if($format->hauteur == 0){
$targetHeight = floor(($media->hauteur*$format->largeur)/$media->largeur);
}else{
$targetHeight = $format->hauteur;
}
$im->setImageFormat($format->extension);
if($media->largeur >= $targetWidth || $media->hauteur >= $targetHeight){
$im->thumbnailImage($targetWidth, $targetHeight , true);
}
$im->writeImage($fp);
}
$im->destroy();
}
public function create_sys_thumb($media) {
$mediaPath = public_path()."/".$media->folder.$media->uid.".".$media->extension;
$im = new \imagick();
$im->readImage($mediaPath);
if(in_array($media->extension, array("pdf", "ai", "psd")) ){
$extension = "png";
$im->setIteratorIndex(0);
}else{
$extension = $media->extension;
}
// create preview
$fp = public_path()."/".$media->folder.$media->uid.'_preview.'.$extension;
if($media->extension == "gif" ){
if($media->largeur >= 1500 || $media->hauteur >= 1500 || $media->largeur == ""){
$im = $im->coalesceImages();
foreach ($im as $frame) {
$frame->thumbnailImage(1500, 1500);
$frame->setImagePage(1500, 1500, 0, 0);
}
$im = $im->deconstructImages();
}
$im->writeImages($fp, true);
}else{
if($media->largeur >= 1500 || $media->hauteur >= 1500 || $media->largeur == ""){
$im->thumbnailImage(1500, 1500 , true);
}
$im->writeImage($fp);
}
// create thumb
$im->setImageBackgroundColor('#ffffff');
$im->setImageAlphaChannel(\Imagick::ALPHACHANNEL_REMOVE);
$im->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN);
$im->stripImage();
$fp = public_path()."/".$media->folder.$media->uid.'_thumb.'.$extension;
$im->thumbnailImage(200, 200 , true);
$im->writeImage($fp);
$im->destroy();
}
public function get_mediaFolder() {
$mediaPath = "medias/";
$directories = Storage::allDirectories($mediaPath );
$selectedFolder = "";
// on obtient le dernier dossier créé
foreach ($directories as $key => $foldername) {
if($selectedFolder < $foldername){
$selectedFolder = $foldername;
}
}
// si on n'a pas de dossier, on le créé
if($selectedFolder == ""){
$selectedFolder = $mediaPath.uniqid();
Storage::makeDirectory($selectedFolder);
}else{
// on compte le nombre de fichier
$files = Storage::allFiles($selectedFolder);
// si on en a plus de 1000, on créé un nouveau dossier
if(count($files)> 1000){
$selectedFolder = $mediaPath.uniqid();
Storage::makeDirectory($selectedFolder);
}
}
return $selectedFolder;
}
public function fix_integer_overflow($size) {
if ($size < 0) {
$size += 2.0 * (PHP_INT_MAX + 1);
}
return $size;
}
public function formatBytes($octet, $precision = 2) {
// Array contenant les differents unités
$unite = array('octet','Ko','Mo','Go');
if ($octet < 1000) // octet
{
return $octet.$unite[0];
}
else
{
if ($octet < 1000000) // ko
{
$ko = round($octet/1024,2);
return $ko.$unite[1];
}
else // Mo ou Go
{
if ($octet < 1000000000) // Mo
{
$mo = round($octet/(1024*1024),2);
return $mo.$unite[2];
}
else // Go
{
$go = round($octet/(1024*1024*1024),2);
return $go.$unite[3];
}
}
}
}
// ---- Renvoi le chemin attendu d'un média selon le format demandé
public function get_mediaPath($media, $format = "") {
// format original
if($format == ""){
return public_path()."/".$media->folder.$media->uid.'.'.$media->extension;
}
// format spécifique
if($format->system == 0){
if(in_array($media->extension, array("gif", "jpeg", "jpg", "png", "pdf", "ai", "psd")) ){
return public_path()."/".$media->folder.$media->uid.'_'.$format->libelle.'.'.$format->extension;
}else{
return public_path()."/".$media->folder.$media->uid.'.'.$media->extension;
}
}
// format système (thumb et preview)
if($format->system == 1){
if(in_array($media->extension, array("gif", "jpeg", "jpg", "png")) ){
return public_path()."/".$media->folder.$media->uid.'_'.$format->libelle.'.'.$media->extension;
}elseif(in_array($media->extension, array("pdf", "ai", "psd"))){
return public_path()."/".$media->folder.$media->uid.'.png';
}else{
return public_path()."/".$media->folder.$media->uid.'.'.$media->extension;
}
}
}
}