Salut !
Ca fait un jour que je cherche je sais pas pourquoi mon système ne fonctionne pas ...
J'ai donc suivi le tuto sur imagine , j'en suis a creer une mosaic d'image.

Voici le code qui fonctionne et qui me creer une mosaic avec une seul image en haut à gauche pour l'instant :

$directory = 'img/mosaic';
$perLine = 3;
$width = 150;
$height = 100;
$images = glob($directory.'/*.jpg');
require_once (APPPATH."libraries/imagine.phar"); 

//On creer une mosaic vide
$imagine = new Imagine\Gd\Imagine();
$size = new Imagine\Image\Box($width * ceil( count($images)/$perLine ),$perLine * $height);
$thumbsize = new Imagine\Image\Box($width,$height);
$mosaic = $imagine->create($size);
$mosaic->save($directory.'/mosaic.jpg');
$thumb = $imagine->open('img/mosaic/usa.jpg')->thumbnail($thumbsize,'outbound');
$mosaic->paste($thumb, new Imagine\Image\Point(0, 0));      
foreach ($images as $k => $image)
{
    if(!strpos($image, 'mosaic'))
    {
        echo $image."\n";
    }
}
$mosaic->save($directory.'/mosaic.jpg');

En revanche pour la suite j'ai un problème pour creer une ligne entiere d'image en recuperant les images de mon dossier, cela me creer une mosaic vide avec aucune image :

$directory = 'img/mosaic';
$perLine = 3;
$width = 150;
$height = 100;
$images = glob($directory.'/*.jpg');
require_once (APPPATH."libraries/imagine.phar"); 

//On creer une mosaic vide
$imagine = new Imagine\Gd\Imagine();
$size = new Imagine\Image\Box($width * ceil( count($images)/$perLine ),$perLine * $height);
$thumbsize = new Imagine\Image\Box($width,$height);
$mosaic = $imagine->create($size);
$mosaic->save($directory.'/mosaic.jpg');
foreach ($images as $k => $image)
{
    if(!strpos($image, 'mosaic'))
    {
        $x = floor($k / $perLine) * $width;
        $point = new Imagine\Image\Point($x, 0);
        $thumb = $imagine->open($image)->thumbnail($thumbsize,'outbound');
        $mosaic->paste($thumb, $point);
    }
}
$mosaic->save($directory.'/mosaic.jpg');

J'ai l'impression qu'il ne rentre pas dans mon foreach mais je ne vois pas pourquoi...je suis sur codeignter .

En espérant trouver de l'aide ;)

1 réponse


xenos92
Auteur
Réponse acceptée

Bonjour,
Je reviens j'ai identifié mon problème mais je ne vois pas comment le résoudre ...

Voici la fonction qui creer ma mosaic d'image :

static function mosaic($directory,$perLine,$width,$height){
        $images = glob($directory.'/*.jpg');
        require_once (APPPATH."libraries/imagine.phar"); 
        $imagine = new Imagine\Gd\Imagine();
        $size = new Imagine\Image\Box($width * ceil( count($images)/$perLine ),$perLine * $height);
        $thumbsize = new Imagine\Image\Box($width,$height);
        $mosaic = $imagine->create($size);
        foreach ($images as $k => $image) 
        {

                $x = floor($k / $perLine) * $width;
                $y = $k % $perLine * $height;
                $point = new Imagine\Image\Point($x, $y);
                $thumb = $imagine->open($image)->thumbnail($thumbsize,'outbound');
                $mosaic->paste($thumb, $point);
                echo $image."\n";

        }
        $aplat = $imagine->create($size, new Imagine\Image\Color('308cba', 15));
        $mosaic->paste($aplat, new Imagine\Image\Point(0,0));
        $mosaic->save($directory.'/mosaic.jpg');
}

Et le code qui appele ma fonction sur ma page profil.php:

<style type="text/css">
.bandeMosaic{
    height: 300px;
    background: url(<?= Image::mosaic('img/mosaic',3,150,100);?>) left top;
    background-size: cover;
    color: #fff;
}
</style>
<div class="bandeMosaic"></div>

Donc si j'appele ma fonction mosaic, ma mosaic d'images est bien créer avec les images dans le dossier "img/mosaic".
Le problème est que cela me créer une erreur dans ma page profil.php et ne m'affiche pas la mosaic dans la div bandeMosaic car je suis sur codeIgniter et pour afficher la mosaic il faut que je mette par exemple :

<style type="text/css">
.bandeMosaic{
    height: 300px;
    background: url(<?= base_url().'img/mosaic/mosaic.jpg';?>) left top;
    background-size: cover;
    color: #fff;
}
</style>

Ceci m'affiche la mosaic car il y a base_url() devant mon chemin, ça retourne http://monsite/img/mosaic/mosaic.jpg
C'est là le problème car quand je fais appele a la fonction imagine::mosaic le $directory que je dois mettre est 'img/mosaic' pour que ma mosaic se creer dans le dossier mosaic mais je dois retourner mon chemin avec base_url() devant.

J'ai essayé beaucoup de choses pour caler mon base_url() mais rien n'y fait :(