Mam funkcję php
o nazwie compressImage()
, która wygląda tak:
function compressImage($source, $destination, $quality) {
$info = getimagesize($source);
if ($info['mime'] == 'image/jpeg')
$image = imagecreatefromjpeg($source);
elseif ($info['mime'] == 'image/gif')
$image = imagecreatefromgif($source);
elseif ($info['mime'] == 'image/png')
$image = imagecreatefrompng($source);
imagejpeg($image, $destination, $quality);
}
Próbuję skompresować przesłane obrazy za pomocą tej funkcji. W pliku php
o nazwie add1.php
nazywam tę funkcję w ten sposób:
if (!empty($_FILES['image1']['name'])) {
$temp = explode(".", $_FILES["image1"]["name"]);
$newName = date('Ymdhis')."1";
$newName = strval($newName) . "." . end($temp);
$newPath = '../uploads/'.$newName;
move_uploaded_file($_FILES['image1']['tmp_name'], $target_dir . $newName);
compressImage($newPath, $newPath, 60);
$image1 = $newName;
}
Działa to, gdy przesyłam jpeg
obrazy i faktycznie zmniejsza ich rozmiar. Ale kiedy przesyłam png
pliki, są one przesyłane, ale są zepsute i nie można ich otworzyć. Nie mam pojęcia, jaka jest przyczyna tego problemu. Każda pomoc będzie mile widziana. Dziękuję Ci
2 odpowiedzi
Możesz zmodyfikować compressImage
tak, aby generował obrazy w tym samym formacie, w jakim zostały dostarczone, i użyć wartości zwracanej z funkcji do dalszego przetwarzania, jeśli jest to wymagane.
function compressImage( $source=false, $destination=false, $quality=80, $filters=false ) {
$info = getimagesize( $source );
switch( $info['mime'] ){
case 'image/jpeg':
/* Quality: integer 0 - 100 */
if( !is_int( $quality ) or $quality < 0 or $quality > 100 ) $quality=80;
$image = imagecreatefromjpeg( $source );
return imagejpeg( $image, $destination, $quality );
case 'image/gif':
$image = imagecreatefromgif( $source );
return imagegif( $image, $destination );
case 'image/png':
/* Quality: Compression integer 0(none) - 9(max) */
if( !is_int( $quality ) or $quality < 0 or $quality > 9 )$quality=6;
$image = imagecreatefrompng( $source );
return imagepng( $image, $destination, $quality, $filters );
case 'image/webp':
/* Quality: Compression 0(lowest) - 100(highest) */
if( !is_int( $quality ) or $quality < 0 or $quality > 100 )$quality=80;
$image=imagecreatefromwebp( $source );
return imagewebp( $image, $destination, $quality );
case 'image/bmp':
/* Quality: Boolean for compression */
if( !is_bool( $quality ) )$quality=true;
$image=imagecreatefrombmp( $source );
return imagebmp( $image, $destination, $quality );
default:exit( sprintf( 'Unknown type: %s',$info['mime'] ) );
}
}
Korzystanie z wartości zwracanej
if( compressImage($newPath, $newPath, 60) ){ /* success */ }
else { /* Failure */ }
We wszystkich przypadkach piszesz obraz za pomocą imagejpeg
; także pliki GIF i PNG.
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.