Formulir Symfony3: mengubah ukuran gambar yang diunggah

Saya membuat formulir untuk mengunggah gambar. Gambar yang diunggah perlu diubah ukurannya dan diunggah ke bucket s3. Setelah itu saya mendapatkan url s3 dan menyimpannya ke objek Posting. Namun saya mengalami beberapa masalah saat mengubah ukuran dan mengunggah. Ini kode saya:

Pengontrol Formulir:

public function newAction(Request $request)
{
    $post = new Post();
    $form = $this->createForm('AdminBundle\Form\PostType', $post);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        $img = $form['image']->getData();
        $s3Service = $this->get('app.s3_service');

        $fileLocation = $s3Service->putFileToBucket($img, 'post-images/'.uniqid().'.'.$img->guessExtension());

        $post->setImage($fileLocation);

        $em = $this->getDoctrine()->getManager();
        $em->persist($post);
        $em->flush();

        return $this->redirectToRoute('admin_posts_show', ['id' => $post->getId()]);
    }

    return $this->render('AdminBundle:AdvertPanel:new.html.twig', [
        'advert' => $advert,
        'form' => $form->createView(),
    ]);
}

app.s3_service - layanan yang saya gunakan untuk mengubah ukuran dan mengunggah gambar

public function putFileToBucket($data, $destination){

    $newImage = $this->resizeImage($data, 1080, 635);

    $fileDestination = $this->s3Service->putObject([
        "Bucket" => $this->s3BucketName,
        "Key" => $destination,
        "Body" => fopen($newImage, 'r+'),
        "ACL" => "public-read"
    ])["ObjectURL"];

    return $fileDestination;
}

public function resizeImage($image, $w, $h){
    $tempFilePath = $this->fileLocator->locate('/tmp');

    list($width, $height) = getimagesize($image);

    $r = $width / $height;

    if ($w/$h > $r) {
        $newwidth = $h*$r;
        $newheight = $h;
    } else {
        $newheight = $w/$r;
        $newwidth = $w;
    }

    $dst = imagecreatetruecolor($newwidth, $newheight);
    $image = imagecreatefrompng($image);
    imagecopyresampled($dst, $image, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    file_put_contents($tempFilePath, $dst);
    return $tempFilePath;
}

Tapi saya mendapatkan kesalahan:

  Warning: file_put_contents(): supplied resource is not a valid stream resource

person Community    schedule 31.07.2017    source sumber


Jawaban (1)


Saya pikir masalahnya adalah bagaimana Anda ingin menyimpan gambar dengan file_put_contents() Anda berurusan dengan sumber gambar khusus yang digunakan oleh gd yang harus diubah menjadi yang tepat, misalnya. png, berkas.

Sepertinya Anda menggunakan GD yang menawarkan metode imagepng() yang Anda dapat digunakan sebagai gantinya. Anda juga dapat menemukan contohnya di dokumen: http://php.net/manual/en/image.examples.merged-watermark.php

Dengan kata lain ganti:

file_put_contents($tempFilePath, $dst);

dengan:

imagepng($dst, $tempFilePath);
person dbrumann    schedule 31.07.2017