2014-03-07 63 views
0

我确信这个话题已经讨论了多少次,我从昨天晚上开始这样做,但直到现在还没有完全满意。我使用下面的代码,它给了我一个调整大小的图像,但缩放比例不正确。高度和宽度不是正确的比例。调整大小的图像与确切的宽度和高度在php

我找不到像jsfiddle这样的好提琴,你可以在这里看到粘贴我的代码的输出。

你可以在这里看到原始图像的网址,我也附上了一个调整大小的图像。

http://distilleryimage4.s3.amazonaws.com/b1da08e4484511e38e4d0a7011810191_7.jpg

$filename = 'http://distilleryimage4.s3.amazonaws.com/b1da08e4484511e38e4d0a7011810191_7.jpg'; 
//the resize will be a percent of the original size 
$percent = 0.589; 
$percent_height = 0.294; 

// Content type 
header('Content-Type: image/jpeg'); 

// Get new sizes 
list($width, $height) = getimagesize($filename); 
$newwidth = $width * $percent; 
$newheight = $height * $percent_height; 

// Load 
$thumb = imagecreatetruecolor($newwidth, $newheight); 
$source = imagecreatefromjpeg($filename); 

// Resize 
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 


imagejpeg($thumb); 
imagedestroy($thumb); 

Resized Image

回答

2

这基本上是一个数学问题:

您是缩放的宽度和高度两者不同比例($percent$percent_height)。您应该按相同的百分比缩放它们两个(宽度和高度),以便将图像调整为相同的比例。也许我不明白你的问题,但我认为你应该改变这一行:

$newheight = $height * $percent_height; 

$newheight = $height * $percent; 

(并删除$percent_height = 0.294;如果我们不打算用在这里)

+0

许多感谢您的建议。它的工作。我做到了这一点,它给了我完美scaling.Is有任何方式我可以提到一个固定的高度和宽度的图像。 –

+1

是的,但是当图像没有得到相同的宽度和高度(不是平方,而是矩形)时,它变得复杂。我猜你正在缩小比例。有一个功能用于减少大于1024 x 786的图片:http://pastebin.com/kWQE0PTK'$ maxW'和'$ maxH'是所需的最大尺寸,将它们更改为您需要的任何尺寸。将文件路径作为函数的唯一参数传递。它将返回一个包含原始“宽度”,“高度”和计算值的数组。希望你能从中吸取教训 – aleation

+0

优秀的教程。现在好了。非常感谢。 –

0

我会用Imagick。我正在调整imagecreatetruecolor的大小,但需要很长时间(0.5秒)将1920 * 1080图像调整为150 * 120。

如果你仍然想使用imagecreatetruecolor:得到正确的scalling使用this code

+0

或者你可以使用外部类:[链接](https://github.com/eventviva/php-image-resize) – Makla

相关问题