Im имеет странную проблему, получая / обрезая меньшую версию исходного изображения из базы данных mysql. Вид нового для этого и нужна помощь.
У меня есть сценарий, который загружает изображение в базу данных (исходное изображение), а также меньшее, обрезанное изображение, которое будет использоваться в качестве изображения профиля и тому подобного. Вот этот код:
if(isset($_FILES["file"]["type"])) { $validextensions = array("jpeg", "jpg", "png"); $maxsize = 99999999; $temporary = explode(".", $_FILES["file"]["name"]); $file_extension = end($temporary); if ((($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/jpeg") ) && ($_FILES["file"]["size"] < $maxsize)//Approx. 100kb files can be uploaded. && in_array($file_extension, $validextensions)) { $size = getimagesize($_FILES['file']['tmp_name']); $type = $size['mime']; $imgfp = fopen($_FILES['file']['tmp_name'], 'rb'); $size = $size[3]; $name = $_FILES['file']['name']; $sql = new mysqli("localhost","username","password","sqlserver"); $imgfp64 = base64_encode(stream_get_contents($imgfp)); $update = "UPDATE sqlserver.imageblob set image='".$imgfp64."', image_type='".$type."', image_name='".$name."', image_size='".$size."' where user_id=".$account['id']; $sql->query($update);
Это та часть, где происходит масштабирование:
//small image $w=50;$h=50; list($width, $height) = getimagesize($_FILES['file']['tmp_name']); $r = $width / $height; if ($w/$h > $r) { $newwidth = $h*$r; $newheight = $h; } else { $newheight = $w/$r; $newwidth = $w; } $src = imagecreatefromjpeg($_FILES['file']['tmp_name']); $dst = imagecreatetruecolor($newwidth, $newheight); imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); ob_start(); imagejpeg($dst,null); $dst=ob_get_clean(); $dst = base64_encode($dst); $update2 = "UPDATE sqlserver.imageblob set chatimage='".$dst."' where user_id=".$account['id']; $sql->query($update2);
И вот результат только с некоторыми изображениями –
Оригинал не черный. Я читаю этот пост PHP: черное изображение при обрезке с использованием php и думаю, что скрипт может быть обрезан за пределами изображения. Что я могу изменить в своем коде для смягчения этого?
Как я могу сделать его масштабировать и обрезать изображение с изображения не снаружи?