簡體   English   中英

如何在PHP中將大量圖像復制到畫布上?

[英]how do I copy a lot of images onto a canvas in PHP?

我有一個將某些圖像復制到畫布上並將其保存到文件中的功能。 我的代碼在帖子的底部。

當我嘗試將15張圖像復制到畫布上時,代碼工作正常,但是當我嘗試復制30張圖像時,它就停止了。 沒有錯誤或異常...

我希望你們中的一個可以幫助我:)

    $img        = imagecreatefromjpeg( $image );
    $imgWidth   = imagesx($img);
    $imgHeight  = imagesy($img);

    // CREATE CANVAS AND FILL WITH WHITE
    $canvas     = imagecreatetruecolor( $guidelines['canvasW'] * $dpi, $guidelines['canvasH'] * $dpi );
    $color      = imagecolorallocate( $canvas, 255, 255, 255 );
    imagefill( $canvas, 0, 0, $color );

    // COPY THE IMAGES ONTO THE CANVAS
    foreach( $guidelines['imageGuide'] as $guide ):

        $bestFit    = bestFit( $imgWidth, $imgHeight, $guide['W'] * $dpi, $guide['H'] * $dpi );
        if( $bestFit['rotate'] ) {
            $output = imagerotate($img, 90, 0);
        } else {
            $output = imagerotate($img, 0, 0);
        }
        imagecopyresampled($canvas, $output, $guide['X'] * $dpi, $guide['Y'] * $dpi, 0, 0, $bestFit['x'], $bestFit['y'], imagesx($output), imagesy($output));

        imagedestroy($output);
    endforeach;

$ guidelines是一個數組。 這是一個將16張圖像復制到畫布上的示例

    $guidelines = array(    'canvasW' => 20,
            'canvasH' => 30,
            'imageGuide' => array(
                        array('W' => 18,    'H' => 13,  'X' => 1,   'Y' => 1.5),

                        array('W' => 3.5,   'H' => 4.5, 'X' => 1.25,    'Y' => 15),
                        array('W' => 3.5,   'H' => 4.5, 'X' => 4.75,    'Y' => 15),
                        array('W' => 3.5,   'H' => 4.5, 'X' => 8.25,    'Y' => 15),
                        array('W' => 3.5,   'H' => 4.5, 'X' => 11.75,   'Y' => 15),
                        array('W' => 3.5,   'H' => 4.5, 'X' => 15.25,   'Y' => 15),

                        array('W' => 3.5,   'H' => 4.5, 'X' => 1.25,    'Y' => 19.5),
                        array('W' => 3.5,   'H' => 4.5, 'X' => 4.75,    'Y' => 19.5),
                        array('W' => 3.5,   'H' => 4.5, 'X' => 8.25,    'Y' => 19.5),
                        array('W' => 3.5,   'H' => 4.5, 'X' => 11.75,   'Y' => 19.5),
                        array('W' => 3.5,   'H' => 4.5, 'X' => 15.25,   'Y' => 19.5),

                        array('W' => 3.5,   'H' => 4.5, 'X' => 1.25,    'Y' => 24),
                        array('W' => 3.5,   'H' => 4.5, 'X' => 4.75,    'Y' => 24),
                        array('W' => 3.5,   'H' => 4.5, 'X' => 8.25,    'Y' => 24),
                        array('W' => 3.5,   'H' => 4.5, 'X' => 11.75,   'Y' => 24),
                        array('W' => 3.5,   'H' => 4.5, 'X' => 15.25,   'Y' => 24),
                    ),
                );

我猜你在這項工作中使用了太多的RAM。 ImageCopyResampled必須通過您完成的這項工作向RAM中寫入大量內容,並且圖像會占用大量內存。 檢查php.ini文件中的memory_limit ,嘗試增加它,看看是否可以遍歷更多/所有寫入畫布的圖像。 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM