图像调整大小问题使用PHP?

时间:2009-11-11 01:09:40

标签: php css

我想知道如何使用getimagesize()创建一个能够检查jpg,gif,png或任何其他类型图像的PHP代码。

然后检查图像宽度是否小于下面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 个答案:

答案 0 :(得分:1)

您也可以使用CSS设置图像的大小。无论哪种方式,当您向上缩放图像时,图像质量都会降低。

答案 1 :(得分:1)

您可以尝试使用PHP ImageMagick Library's resizeImage method,或者更好地使用scaleImage method。如果我的理解是正确的,那么你真的想要调整图像大小。

如果您只是在演示阶段讨论调整大小,那么this article似乎在谈论这一点。它使用getimagesize获取维度,然后返回一个字符串,您相应地将其传递给img标记。我相信这对你有用。

答案 2 :(得分:1)

您的问题是如何询问服务器图像是否大于某个宽度,以便您知道不使用CSS / HTML来调整这些图像的大小。

更好的方法是使用服务器按比例缩小任何太大的图像。如果您相信您的服务器将始终执行此操作,则不需要在浏览器中进行任何大小调整。

答案 3 :(得分:1)

我为内部框架构建了一个自定义Image类,它使用Simon Jarvis的代码来调整图像大小。

您可以在此处找到示例代码和教程:

http://www.white-hat-web-design.co.uk/articles/php-image-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);
    }   
}

答案 4 :(得分:0)

您可能会看到您的服务器是否安装了ImageMagick或gd,或者是否有任何其他PHP图像库。

另一个可能更好的选择是在javascript中进行图像处理。