Mam taki kod -
index.php
<?php
include( 'skalowanie.php');
$max_file_size = 4000000;
$valid_exts = array('jpeg', 'jpg', 'png');
$sizes = array(960 => 150);
if ($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_FILES['image'])) {
if( $_FILES['image']['size'] < $max_file_size ){
$ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION));
if (in_array($ext, $valid_exts)) {
foreach ($sizes as $w => $h) {
$files[] = resize($w, $h);
}
} else {
$msg = 'Nieobsługiwany plik lub nie podano pliku.';
}
} else{
$msg = 'Max. rozmiar to 4MB';
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>Skalowanie</title>
</head>
<body>
<div class="wrap">
<?php if(isset($msg)): ?>
<p class='alert'><?php echo $msg ?></p>
<?php endif ?>
<!-- file uploading form -->
<form action="" method="post" enctype="multipart/form-data">
<label>
<span>Choose image</span>
<input type="file" name="image" accept="image/*" />
</label>
<input type="submit" value="Skaluj!" />
</form>
<?php
// show image thumbnails
if(isset($files)){
foreach ($files as $image) {
echo "<img class='img' src='{$image}' /><br /><br />";
}
}
?>
</div>
</body>
</html>
skalowanie.php
<?php
function resize($width, $height){
list($w, $h) = getimagesize($_FILES['image']['tmp_name']);
$ratio = max($width/$w, $height/$h);
$h = ceil($height / $ratio);
$x = ($w - $width / $ratio) / 2;
$w = ceil($width / $ratio);
$path = 'uploads/'.$width.'x'.$height.'_'.$_FILES['image']['name'];
$imgString = file_get_contents($_FILES['image']['tmp_name']);
$image = imagecreatefromstring($imgString);
$tmp = imagecreatetruecolor($width, $height);
imagecopyresampled($tmp, $image,
0, 0,
$x, 0,
$width, $height,
$w, $h);
switch ($_FILES['image']['type']) {
case 'image/jpeg':
imagejpeg($tmp, $path, 100);
break;
case 'image/png':
imagepng($tmp, $path, 0);
break;
default:
exit;
break;
}
return $path;
imagedestroy($image);
imagedestroy($tmp);
}
?>
Jak przerobić, aby to działało tak, że:
- jeśli szerokość mniejsza niż 960px, to zostawia a jeśli większa niż 960px, to zmienia na 960px. wysokość taka sama jak we wrzuconym.