Как мне скопировать много изображений на холст в PHP? - PullRequest
1 голос
/ 26 января 2011

Я видел функцию, которая копирует некоторые изображения на холст и сохраняет их в файл.Мой код находится внизу поста.

Код работает нормально, когда я пытаюсь скопировать 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),
                    ),
                );

1 Ответ

0 голосов
/ 26 января 2011

Я собираюсь догадаться, что вы используете слишком много оперативной памяти для этой работы.ImageCopyResampled должен много писать в ОЗУ с этой работой, а изображения могут занимать много памяти.Проверьте memory_limit в своем файле php.ini, попробуйте увеличить его и посмотреть, сможете ли вы пройти через все / больше ваших изображений, записываемых на холст.Удачи!

...