Изменение размера изображения с помощью php? - PullRequest
1 голос
/ 11 ноября 2009

Мне было интересно, как я могу создать фрагмент кода PHP, который будет проверять изображения jpg, gif, png или любые другие типы, используя getimagesize ().

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

код CSS

overflow: hidden;  width:100px; height: auto;

Я обнаружил этот фрагмент кода в сети ниже, он, кажется, использует getimagesize (), но, похоже, он не изменяет размер изображения. Есть ли способ, как я могу это исправить.

<?php

function imageResize($width, $height, $target) {

//takes the larger size of the width and height and applies the  
//formula accordingly...this is so this script will work  
//dynamically with any size image

if ($width > $height) {
$percentage = ($target / $width);
} else {
$percentage = ($target / $height);
}

//gets the new value and applies the percentage, then rounds the value
$width = round($width * $percentage);
$height = round($height * $percentage);

//returns the new sizes in html image tag format...this is so you
//can plug this function inside an image tag and just get the

return "width=\"$width\" height=\"$height\"";

}

?>

<?php

//get the image size of the picture and load it into an array
$mysock = getimagesize("images/sock001.jpg");

?>

<!--using a standard html image tag, where you would have the  
width and height, insert your new imageResize() function with  
the correct attributes -->

<img src="images/sock001.jpg" <?php imageResize($mysock[0],  
$mysock[1], 150); ?>>

Ответы [ 5 ]

1 голос
/ 11 ноября 2009

Я создал собственный класс Image для нашей собственной инфраструктуры, который использует код от Саймона Джарвиса для основ изменения размера изображения.

Пример кода и учебное пособие можно найти здесь:

http://www.white -hat-web-design.co.uk / статьи / PHP-изображения resizing.php

В основном, волшебство того, что вы хотите сделать, сводится к следующим методам, которые я использую в нашем классе изображений (любые свойства класса задаются в другом месте, но вы можете просто жестко кодировать эти значения, если вам нужно): *

public function resize($width,$height) 
{
  $new_image = imagecreatetruecolor($width, $height);
  imagecopyresampled($new_image, $this->_image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
  $this->_image = $new_image;

  unset($new_image);

  return $this;   
}

public function resizeToHeight($height) 
{
  $ratio = $height / $this->getHeight();
  $width = $this->getWidth() * $ratio;
  $this->resize($width,$height);

  return $this;
}

public function resizeToWidth($width) 
{
  $ratio = $width / $this->getWidth();
  $height = $this->getheight() * $ratio;
  $this->resize($width,$height);

  return $this;
}

public function output()
{   
    if($this->_image) {
        ob_clean();
        ob_end_clean();

        // Start sending headers
        header("Pragma: public"); // required
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: private",false); // required for certain browsers
        header("Content-Transfer-Encoding: binary");
        header("Content-Type: " . $this->_settings['mime']);

        $function = 'image' . substr($this->_settings['mime'], 6); 
        $function($this->_image);
    }   
}
1 голос
/ 11 ноября 2009

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

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

1 голос
/ 11 ноября 2009

Вы можете попробовать использовать метод resizeImage библиотеки * ImageMagick из PHP , или, что еще лучше, метод scaleImage . То есть, если я правильно понимаю, вы буквально хотите изменить размер изображения.

Если вы говорите о том, чтобы просто изменить размер на этапе презентации, то эта статья , похоже, говорит об этом. Он получает размеры, используя getimagesize, а затем возвращает строку, которую вы передаете тегу img соответственно. Я уверен, что это будет вам полезно.

1 голос
/ 11 ноября 2009

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

0 голосов
/ 11 ноября 2009

Вы можете увидеть, установлен ли на вашем сервере ImageMagick или gd, или какое-либо количество других библиотек изображений PHP.

Другим вариантом, который, вероятно, лучше, является манипулирование изображениями в javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...