2010-07-09 128 views
2

HY填充任何空间,调整图像尺寸的确切尺寸,保留方面以及在PHP

比方说,我想将图像转换成精确的尺寸,例如:400×300。诀窍是,如果图像由于其纵横比不适合400x300,则将其放置在黑色边框的位置。

900x1200图像将被转换为225x300以保留其纵横比,然后左右黑边将其设为400x300。

原始照片:

||||||||||||||||||||||| 
||||||||||||||||||||||| 
||||||||||||||||||||||| 
||||||||||||||||||||||| 
||||||||||||||||||||||| 
||||||||||||||||||||||| 
||||||||||||||||||||||| 
||||||||||||||||||||||| 

调整大小后,我想是这个样子:

_______________________ 
|+++++++++++++++++++++| 
|+++++++++++++++++++++| 
|+++++++++++++++++++++| 
|+++++++||||||||++++++| 
|+++++++||||||||++++++| 
|+++++++++++++++++++++| 
|+++++++++++++++++++++| 
|_____________________| 

的: “+++++++” 我想会有些色差,和“|||||||”是形象,在中间!

不幸的是,我还没有任何代码!

我想是这样的: http://phpthumb.sourceforge.net/demo/demo/phpThumb.demo.demo.php#x22 感谢

+0

显示真实照片的例子。我不明白你在问什么。 – VOX 2010-07-09 01:25:20

+1

你还没有给出一个问题(除非你想让人为你编写代码),所以我可以提供的最多建议是使用ImageMagick或GD等图形库。 – 2010-07-09 01:31:11

+0

纵横比计算应该是最不关心的问题,这很简单,你应该能够很快计算出来。更大的问题似乎是你不知道从哪里开始,这是否正确? – deceze 2010-07-09 01:49:47

回答

3

熟悉的gd functions,让您处理图像。

您需要使用imagecreatefrom...函数之一读入图像。然后,您需要使用例如imagecreatetruecolor创建第二个图像,其中您选择了fill。然后,您使用imagecopyresampled将原始图像复制到新图像中,从而允许您在该过程中调整其大小。您需要事先使用一些简单的数学运算来计算新的尺寸,像getimagesize这样的功能可以帮助您。

另外,玩ImageMagick类,这是gd的替代品,你可能会或可能不会更容易使用。

祝你好运! :)

+0

@robertdd每个函数都有很多示例代码,['imagecopyresampled']的示例(http://php.net/manual/en/function.imagecopyresampled.php)几乎就是您要查找的内容。 – deceze 2010-07-09 02:24:22

-2

我编辑的大风扇,并提前调整大小的图片,是我想,而不是当它被渲染设置宽度和高度尺寸。性能更好,您不必担心不同的浏览器如何处理它。

所以,如果你没有图像编辑程序获取Paint.net。免费,效果很好。

+1

我想这是在PHP中完成! – robertdd 2010-07-09 01:56:16

+0

这与我所说的无关。我在你的电脑上重新调整图像大小,然后当你渲染网页时,浏览器不必重新调整大小。 – JBrooks 2013-09-28 16:50:16

0

创建一个样式为黑色背景的div,尺寸为400x300。然后在该div内显示调整大小的图像。您甚至可以在显示div之前添加检查以确保图像不是所需的方面。

事情是这样的:

<? 
$height-ratio = $height/300; 
$width-ratio = $width/400; 

if ($height-ratio == $width-ratio) { 
$ratio = $height-ratio; 
} elseif ($height-ratio > $width-ratio) { 
$ratio = $height-ratio; 
echo "<div class='blackbox'>"; 
} else { 
$ratio = $width-ratio; 
echo "<div class='blackbox'>"; 
} 

$newHeight = $height/$ratio; 
$newWidth = $width/$ratio; 
echo "<img src='".$imgSrc."' height='".$newHeight."' width='".$newWidth."' />"; 

if ($height-ratio != $width-ratio) 
echo "</div>"; 
?> 

随着支持CSS:

.blackbox { 
text-align: center; 
background-color: black; 
height: 300px; 
width: 400px; 
} 
+0

我需要保存照片,不仅要显示它 – robertdd 2010-07-09 02:11:30

+0

好的想法。无需浪费固体bg上的带宽 - 特别是如果图像将以压缩的JPEG格式输出,这会使纯色看起来很糟糕。如果你需要保存它,那么我会坚持使用PNG或SVG(SVG不太受支持,但会最有效地渲染背景)。 – 2010-07-09 02:12:07

+0

您可能不会在纯色背景上浪费带宽,但您仍在下载一个潜在的海量图片,该图片只能通过浏览器缩小至400x300。这可能会浪费比黑色边框更多的带宽。 – deceze 2010-07-09 02:15:35