मेरे पास छवि का आकार बदलने का एक तरीका है, जो छवि स्ट्रिंग और नए आयामों को स्वीकार करता है और नई छवि स्ट्रिंग वापस करनी चाहिए। लेकिन यह काम नहीं करता

   public function putBase64ThumbToFile($base64String){
    $fs = new Filesystem();
    $TEMP_FOLDER_NAME = "tmpimageupload";

    $pos  = strpos($base64String, ';');
    $type = explode('/', substr($base64String, 0, $pos))[1];

    $base64String = str_replace('data:image/'. $type .';base64,', '', $base64String);
    $base64String = str_replace(' ', '+', $base64String);
    $data = base64_decode($base64String);

    $resizedImage = $this->resizeAndCompressImage($data, 100, 100);

    $fs->mkdir($TEMP_FOLDER_NAME, 0700);
    $tempFilePath = $TEMP_FOLDER_NAME.'/'.uniqid() . '.' . $type;

    file_put_contents($tempFilePath, $resizedImage);
}

public function resizeAndCompressImage($data, $w, $h) {
    list($width, $height) = getimagesizefromstring($data);
    $r = $width / $height;

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

    $src = imagecreatefromstring($data);
    $dst = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    ob_start();
    imagepng($src);
    $image = ob_get_clean();

    return $image;
}

परिणाम में मुझे वही अनारक्षित छवि मिलती है।

0
blahblah 11 नवम्बर 2016, 16:28

1 उत्तर

सबसे बढ़िया उत्तर

आपकी गलती इस लाइन पर है:

imagepng($src);

आप स्रोत छवि लेते हैं न कि गंतव्य छवि:

imagepng($dst);

1
Eric Liebstreich 11 नवम्बर 2016, 17:06