изменение размера и отображение изображений из sql в php
Я хочу изменить следующий php-код, чтобы он изменял размеры и отображал изображения по одному, с помощью кнопок "далее" и "предыдущий", чтобы просматривать фотографии. Я не хочу, чтобы какая-либо галерея изображений или решения для лайтбоксов, а фотографии просто отображались на странице. Я новичок в php, поэтому, если кто-то может помочь или указать мне правильное направление, я буду признателен за любую помощь.
$sql = "select * from people";
$result = mysql_query($sql) or die ("Could not access DB: " . mysql_error());
while ($row = mysql_fetch_assoc($result))
{
echo "<div class=\"picture\">";
echo "<p>";
// Note that we are building our src string using the filename from the database
echo "<img src=\"images/" . $row['filename'] . "\" alt=\"\" /><br />";
echo $row['fname'] . " " . $row['lname'] . "<br />";
echo "</p>";
echo "</div>";
2 answers
Вы можете масштабировать их в браузере, используя атрибуты width
и height
(или только один будет поддерживать соотношение сторон), однако это плохо по многим причинам, включая пропускную способность, производительность страницы и качество изображения.
Вы можете изменить размер изображений с помощью таких библиотек, как GD
или Imagick
Краткий пример с IMagick
:
$hThumb = new Imagick($path_to_file); // Source file
$hThumb->thumbnailImage($x, $y); // You can use 300, 0 to do 300 width and maintain aspect ratio.
$hThumb->stripImage(); // remove meta data
$hThumb->writeImage($path_to_thumb); // write the image to disk
Примечание
Убедитесь, что у вас есть разрешения на чтение/запись. Вы можете проверить эти разрешения с помощью is_readable
и is_writable
.
Загрузка
Рекомендуется загружать изображения с помощью AJAX
, что довольно просто, если использовать JQuery
или аналогичную библиотеку.
$('#nextBtn').click(function() {
var index = 0; // Store this in your image ID tag perhaps
// e.g. $('#theImage').attr('id').replace('image', '')
// where ID is imageX
$.ajax({
url: 'getImages.php?index=' + index,
type: "GET",
success: function(data) {
var result = $.parseJSON(data);
if (result.success) {
// Set your image src with the new path.
// Use result.image_data.src etc...
}
}
});
});
PHP тоже был бы относительно простым, структура, подобная этой:
<?php
$return = array('success' => false, 'image_data' => array());
if (isset($_GET['index']) && is_numeric($_GET['index')) {
// Fetch your image
$return = array(
'success' => true,
'image_data' => array(
'src' => $src,
'title' => $title,
'index' => $index
)
);
}
echo json_encode($return);
?>
** Еще одно примечание**
Как указано КГБ, вы должны изменить их размер при загрузке, однако они могут не быть отправлены пользователем, поэтому вы также можете проверить, существуют ли большие пальцы на выходе, и сгенерировать их по мере необходимости. Конечно однако не создавайте их для каждого представления.
Вы должны изменять размер изображений при загрузке, а не при выводе. Храните как исходные, так и измененные изображения, показывайте небольшие изображения в списке и в полном размере, когда пользователь этого захочет...
Пример кода из imagecopyresampled() документы:
// Get new dimensions
list($width, $height) = getimagesize($filename);
$widthNew = 320; // You decide
$heightNew = 240; // You decide
// Resample
$imageNew = imagecreatetruecolor($widthNew, $heightNew);
$imageOld = imagecreatefromjpeg($filename);
imagecopyresampled($imageNew, $imageOld, 0, 0, 0, 0, $widthNew, $heightNew, $width, $height);
// Output
imagejpeg($imageNew, $newFilename, 100);
В этом примере ожидается, что расширение gd будет включено в php. Расширение Imagick, упомянутое Мартином, является более мощным и обеспечивает более приятный интерфейс, но редко включается в веб-хостинги.
Также погуглил это для вас: http://www.9lessons.info/2009/03/upload-and-resize-image-with-php.html