изменение размера и отображение изображений из 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>";

Источник приведенного выше кода

Author: uneducatedguy, 2012-07-16

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);
 ?>

** Еще одно примечание**

Как указано КГБ, вы должны изменить их размер при загрузке, однако они могут не быть отправлены пользователем, поэтому вы также можете проверить, существуют ли большие пальцы на выходе, и сгенерировать их по мере необходимости. Конечно однако не создавайте их для каждого представления.

 1
Author: Martin, 2012-07-15 22:06:35

Вы должны изменять размер изображений при загрузке, а не при выводе. Храните как исходные, так и измененные изображения, показывайте небольшие изображения в списке и в полном размере, когда пользователь этого захочет...

Пример кода из 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

 1
Author: Sergey Eremin, 2012-07-15 22:02:00