PHP - загрузить одно изображение дважды - PullRequest
0 голосов
/ 07 октября 2018

Я хочу загрузить одно изображение (так, 1 $ _FILES элемент) дважды, чтобы я мог изменить его размер в 2 размерах.

Я подумал, что могу сделать цикл для этого и просто зациклить библиотеку загрузки дваждыПримерно так:

                for ($k = 0; $k < 2; $k++) {
                    if($k == 0) { // small
                        $image = new Bulletproof\Image($_FILES);
                        $image->setName(uniqid() . '-small'); 
                        $image->setMime(array('jpg', 'png', 'jpeg'));
                        $image->setLocation('../../assets/images/usercontent/site/tutorials/');

                        if($image["banner"]){
                            if($image->upload()) {
                                $create = $engine->runQuery("INSERT INTO site_uploads(hook_id, image_id, type, category) VALUES(:hook_id, :image_id, :type, :category)");
                                $create->execute(array(':hook_id'=>$_POST['id'], ':image_id'=>$image->getName(), ':type'=>$image->getMime(), ':category'=>'0'));

                                bulletproof\utils\resize($image->getFullPath(), $image->getMime(), $image->getWidth(), $image->getHeight(), 190, 175);
                            }
                        }
                    } elseif($k == 1) { // large
                        $image = new Bulletproof\Image($_FILES);
                        $image->setName(uniqid() . '-large'); 
                        $image->setMime(array('jpg', 'png', 'jpeg'));
                        $image->setLocation('../../assets/images/usercontent/site/tutorials/');

                        if($image["banner"]){
                            if($image->upload()) {
                                $create = $engine->runQuery("INSERT INTO site_uploads(hook_id, image_id, type, category) VALUES(:hook_id, :image_id, :type, :category)");
                                $create->execute(array(':hook_id'=>$_POST['id'], ':image_id'=>$image->getName(), ':type'=>$image->getMime(), ':category'=>'0'));

                                bulletproof\utils\resize($image->getFullPath(), $image->getMime(), $image->getWidth(), $image->getHeight(), 250, 400);
                            }
                        }
                    }
                }

Но по какой-то причине он загружает только if($k == 0) и просто игнорирует все последующие циклы.

Кто-нибудь знает, почему это происходит, и как яможно решить?

1 Ответ

0 голосов
/ 07 октября 2018

После загрузки файла он переходит во временный каталог.Bulletproof перемещает этот файл из временного каталога в нужное вам место.Таким образом, вы больше не можете получить доступ к временному файлу, потому что вашего файла больше нет. Вы можете сохранить, а затем скопировать, изменить размер с помощью gd или другой библиотеки изображений.

Я не тестировалэто, но я думаю, что это будет прекрасно работать
(для работы требуется библиотека GD)

$image = new Bulletproof\Image($_FILES);
$image->setName(uniqid() . '-large');
$image->setMime(array('jpg', 'png', 'jpeg'));
$image->setLocation('../../assets/images/usercontent/site/tutorials/');

if($image["banner"]){
    if($image->upload()) {
        $create = $engine->runQuery("INSERT INTO site_uploads(hook_id, image_id, type, category) VALUES(:hook_id, :image_id, :type, :category)");
        $create->execute(array(':hook_id'=>$_POST['id'], ':image_id'=>$image->getName(), ':type'=>$image->getMime(), ':category'=>'0'));
        bulletproof\utils\resize($image->getFullPath(), $image->getMime(), $image->getWidth(), $image->getHeight(), 250, 400);

        $file = $image->getFullPath();
        $mime = getimagesize($file)["mime"];
        if ($mime == "image/png"){$image = imagecreatefrompng($file);}
        else if ($mime == ("image/jpg" or "image/jpeg" or "image/pjpeg")){$image = imagecreatefromjpeg($file);}
        else {$image = false;}

        if ($image !== false){
            // edit -- I forget to add variable
            $image = imagescale($image, 190, 175);

            imagejpeg($image, str_replace("-large", "-small", $image->getFullPath()));
            // image saved to same directory as uniqid()-large.***
            // So now you can do sql things
            imagedestroy($image);
        }else {
            // Can't open image
        }
    }
}



РЕДАКТИРОВАТЬ Я не был 'не заметил, но возможно для этого можно использовать пуленепробиваемый \ utils \ resize.

$newname = str_replace("-large", "-small", $image->getFullPath());
if (copy($image->getFullPath(), $newname)) {
    bulletproof\utils\resize($newname, $image->getMime(), $image->getWidth(), $image->getHeight(), 175, 190);
}else {
    // Can't copy file
}
...