Задавайте вопросы, мы ответим
Вы не зашли.
Есть скрипт, который помещает изображение в таблицу в поле BLOB. Как средствами МуСКУЛа (+ ПХП) получить информацию о ширине и высоте загруженного изображения? И вообще, возможно ли это?
Неактивен
Уточнение.
Скрипт помещает изображения в таблицу 'images'. В таблице есть поля image_width и image_height. Откуда брать информацию для заполнения этих полей?
Может, getimagesize()? Но я так и не понял, как передать ей загружаемую картинку...
Неактивен
Вот под руку попался кусок кода.
Может гнать. Нужно знать как имидж в блоб заталкивался. В данном случае проискейпленный jpg из строки.
$im обычный ресурс, с ним можно все что позволяет GD делать
if (mysqli_real_query($link, $query)) {
if ($result = mysqli_store_result($link)) {
$row = mysqli_fetch_assoc($result);
$im = imagecreatefromstring($row[PictSmall] );
if ($im !== false) {
imagejpeg($im);
}
else {
echo 'An error occurred.';
}
Неактивен
Имаж в блобе оказывается следующим путем
<?
if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0)
{
$fName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fSize = $_FILES['userfile']['size'];
$fType = $_FILES['userfile']['type'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fName);
}
include'lib/config.php';
include 'lib/opendb.php';
$query = "INSERT INTO images (img_name, img_size, img_type, img_content ) ".
"VALUES ('$fName', '$fSize', '$fType','$content')";
mysql_query($query) or die('Error, query failed'.mysql_errno().":".mysql_error()."");
?>
На этом этапе реально получить требуемые данные? Чтобы сразу вбить их в поля image_width и image_height, одним запросом?
Неактивен
Функция PHP getimagesize выполняет эту функцию, но ей надо передавать URL http://ru2.php.net/getimagesize
Как обходной вариант - сначала загружаете в базу BLOB без размеров и делаете так, чтобы при этом рисунок стал доступен по HTTP. Вторым шагом - передаете HTTP-адрес рисунка функции getimagesize() и заносите размеры в базу
Неактивен
prisoner написал:
Имаж в блобе оказывается следующим путем
<?
if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0)
{
$fName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fSize = $_FILES['userfile']['size'];
$fType = $_FILES['userfile']['type'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fName);
}
include'lib/config.php';
include 'lib/opendb.php';
$query = "INSERT INTO images (img_name, img_size, img_type, img_content ) ".
"VALUES ('$fName', '$fSize', '$fType','$content')";
mysql_query($query) or die('Error, query failed'.mysql_errno().":".mysql_error()."");
?>
На этом этапе реально получить требуемые данные? Чтобы сразу вбить их в поля image_width и image_height, одним запросом?
По порядку.
В переводе на человеческий это звучит так:
Получаем адрес файла, причем реально не знаем имидж ли он.
Получаем его тип , и верим этому .
Считываем его содержимое в переменную.
Не очень на мой взгляд правильно addslashes на переменную содержащую имидж (это так, IMHO).
Затем все это заталкиваем в базу.
Здесь не так:
Мы не проверили имидж ли это вообще и место ли ему в базе.
Если это все же имидж, мы не проверили его тип и размер. Вполне может пользователь пихнуть BMP метров на 100 и не обязательно по злому умыслу, может и сдуру. А от таких блобов у MySQL кома начинается.
Как по моему более правильно
Из переменной предположительно содержащей имидж создаем ресурс, $im это image identifier, ссылка на ресурс
$im = imagecreatefromstring($content);
if ($im !== false) {
/* Если это все же корректный имидж*/
/* Получаем его размеры */
$width = imagesx($img);
$hight = imagesy($img);
/* Затем по идее необходимо имидж преобразовать во что-то типа PNG, возможно изменив размер.
Велосипед изобретать не буду, здесь http://xpoint.ru/know-how/Articles/Teor … obrazheniy
крайне подробный пример. Он только на первый взгляд страшный. */
/* Преобразованный имидж заталкиваем назад в строку. GD этого не умеет , поэтому слегка ее обойдем */
ob_start();
imagepng($img); /*если конечно в png преобразовали, если нет - соответствующую функцию */
$content = ob_get_contents();
ob_end_clean();
/* искейпим строку. это вместо $content = addslashes($content) */
$content = mysql_escape_string($content);
}
else {
echo 'Это не имидж или данный формат не поддерживается, а может еще чего нить.';
}
Все. Все данные и причесанный имидж у нас есть. Можно заталкивать в базу.
Неактивен
Спасибо огромное. Буду работать дальше.
Неактивен