

**下記を実装したいのですが、どうすれば良いでしょうか？**  
・画像アップロード  
・指定サイズになるまで(XY方向に)並べる  
・1枚画像として保存

**質問**  
・画像アップロード後、画像自体を拡大したり、画像自体をトリミングするImageMagickサンプルはネットで見かけた気がするのですが、「指定サイズになるまで並べる」というのをどうしたら良いか分かりません  
・CSSで並べて表示後、その要素のキャプチャを取得？  
・そんなことをしなくても、ImageMagickでどうにか出来るでしょうか？

**その他**  
・継ぎ目はシームレスではなく、ただ単に繰り返し並べるだけ  
・ImageMagickでなくても良いです


CC BY-SA 3.0
2016-10-16T14:49:25.983
29613
2016-11-12T10:36:00.067
7886
question
javascript php 画像 imagemagick
画像アップロード → 指定サイズになるまで並べる → 1枚画像として保存


GDで簡単に実装できそうですね。  
下記サンプルは、はみ出た分はどうするのかわからないので、はみ出すようにしてます。  
画像がPOSTされているかどうかのチェックは入れていないので、ご自身で入れてみてください。

[code]

    <?php
    
    // 指定する画像の高さ
    $maxHeight = (int) $_POST['max_height'];
    
    // 指定する画像の幅
    $maxWidth = (int) $_POST['max_width'];
    
    // アップロードされた画像
    $image = $_FILES['image']['tmp_file'];
    
    // /で分割
    $mimeType = explode('/', $_FILES['image']['type']);
    
    if ($mimeType[1] === 'jpeg' || $mimeType[1] === 'png' || $mimeType[1] === 'gif') {
    
        // アップロードされた画像をGDにする
        $functionName = 'imagecreatefrom' . $mimeType[1];
        $gdImage = $functionName($image);
    
        // 画像の高さ
        $imageHeight = imagesy($gdImage);
    
        // 画像の幅
        $imageWidth = imagesx($gdImage);
    
        // コピー対象用のGD
        $result = imagecreatetruecolor($maxWidth, $maxHeight);
    
        // 縦方向にコピーする回数 (はみ出さない場合はfloor)
        $copyY = ceil($maxHeight / $imageHeight);
    
        // 横方向にコピーする回数 (はみ出さない場合はfloor)
        $copyX = ceil($maxWidth / $imageWidth);
    
        // コピーしていく
        for ($y = 0; $y < $copyY; $y++) {
            for ($x = 0; $x < $copyX; $x++) {
                imagecopy($result , $gdImage, $x * $imageWidth, $y * $imageHeight, 0, 0, $imageWidth, $imageHeight);
            }
        }
    
        // 結果を出力する
        $outputFunctionName = 'image' . $mimeType[1];
        $outputFunctionName($result, './output.' . $mimeType[1]);
    
    }
    
[/code]


CC BY-SA 3.0
2016-11-12T10:36:00.067
30346
2016-11-12T10:36:00.067
18542
29613
answer