Chcę skompresować i pobrać obrazy.

W tym celu wypróbowałem kod, ale z tym Obrazy zostały pobrane poprawnie, ale nie są kompresowane.

Pokazuje mi błąd z PHP Warning: imagejpeg(email.png): failed to open stream: Permission denied

Poniżej umieściłem kod.

<div class="message">
<?php
   if($_POST){
    	if ($error) {
    	?>
           <label class="error"><?php echo $error; ?></label>
        <?php
        }
   }
?>
</div>
<fieldset class="well">
    <legend>Upload Image:</legend>
    <form action="" name="myform" id="myform" method="post" enctype="multipart/form-data">
        <ul>
            <li>
                <label>Upload:</label>
                <input type="file" name="file" id="file"/>
            </li>
            <li>
                <input type="submit" name="submit" id="submit" class="submit btn-success"/>
            </li>
        </ul>
    </form>
</fieldset>
    $name  = '';
$type  = '';
$size  = '';
$error = '';
function compress_image($source_url, $destination_url, $quality)
{
    $info = getimagesize($source_url);
    if ($info['mime'] == 'image/jpeg')
        $image = imagecreatefromjpeg($source_url);
    elseif ($info['mime'] == 'image/gif')
        $image = imagecreatefromgif($source_url);
    elseif ($info['mime'] == 'image/png')
        $image = imagecreatefrompng($source_url);
    imagejpeg($image, $destination_url, $quality);
    return $destination_url;
}
if ($_POST) {
    if ($_FILES["file"]["error"] > 0) {
        $error = $_FILES["file"]["error"];
    } 
    else if (($_FILES["file"]["type"] == "image/gif") || 
    ($_FILES["file"]["type"] == "image/jpeg") || 
    ($_FILES["file"]["type"] == "image/png") || 
    ($_FILES["file"]["type"] == "image/pjpeg")) {

    $url = $_FILES["file"]["name"];

    $filename = compress_image($temp_file, $url, 80);
    rename($filename, 'image/'.$filename);
    $location = "image/".$url;
    if (file_exists($location))
    {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename='.basename($location));
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($location));
        ob_clean();
        flush();
        readfile($location);
        exit;
    }
    }else {
        $error = "Uploaded image should be jpg or gif or png";
    }
}

Za pomocą tego kodu obraz jest ładowany poprawnie, ale nie jest kompresowany.

Nie wiem, dlaczego tak się dzieje.

Czy ktoś może mi w tym pomóc

2
MNJ 19 grudzień 2019, 13:55
Jaka jest logika compress_image?
 – 
Sumit Surana
19 grudzień 2019, 13:57
Chcę zmniejszyć rozmiar obrazu za pomocą php
 – 
MNJ
19 grudzień 2019, 13:59
Czy próbowałeś umieścić debugger na linii i sprawdzić, czy wykonanie w ogóle tam dociera?
 – 
Sumit Surana
19 grudzień 2019, 14:06
Pokazuje mi błąd PHP Warning: imagejpeg(email.png): nie udało się otworzyć strumienia: Permission denied
 – 
MNJ
20 grudzień 2019, 09:18
To kwestia ścieżki. Twoja ścieżka nie działa poprawnie. Wyślij pełną ścieżkę względną obrazu w funkcji kompresji obrazu
 – 
Amit Sharma
20 grudzień 2019, 09:32

1 odpowiedź

Tutaj jest zaktualizowany kod, który musisz zaktualizować w swoim kodzie. zaktualizuj tylko tę część kodu

$filename = compress_image($temp_file, $url, 80);
rename($filename, 'image/'.$filename);
$location = "image/".$url;
if (file_exists($location))
{
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($location));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($location));
    ob_clean();
    flush();
    readfile($location);
    exit;
}

function compress_image($source_url, $destination_url, $quality)
{
$info = getimagesize($source_url);
if ($info['mime'] == 'image/jpeg'){
     $image = imagecreatefromjpeg($source_url);
    imagejpeg($image, $destination_url, $quality);
}

elseif ($info['mime'] == 'image/gif'){
     $image = imagecreatefromgif($source_url);
     imagegif($image, $destination_url, $quality);
}

elseif ($info['mime'] == 'image/png'){
    $image = imagecreatefrompng($source_url);
    imagepng($image, $destination_url,5);
}


return $destination_url;
}
0
Amit Sharma 20 grudzień 2019, 14:37
W zasadzie nie musimy przesyłać pliku, ponieważ obraz kompresji został utworzony za pomocą kodu kompresji, wystarczy przenieść go do folderu obrazu
 – 
Amit Sharma
20 grudzień 2019, 13:11
Nadal nie kompresuje obrazu
 – 
MNJ
20 grudzień 2019, 14:05
Ściska się dla mnie
 – 
Amit Sharma
20 grudzień 2019, 14:06
Czy możesz opublikować swój rzeczywisty kod lub zaktualizować bieżący kod?
 – 
Amit Sharma
20 grudzień 2019, 14:06
Otworzyłem wątek na czacie, kontynuujmy tam. sprawdź link w ostatniej wiadomości swojego posta
 – 
Amit Sharma
20 grudzień 2019, 14:16