我一直在处理非常小的图像,并试图找到增加它们的最佳方法。我比较了两个不同的来源:imagecopyresampled(PHP:http : //www.php.net/manual/en/function.imagecopyresampled.php)与 Scalr(JAVA:如何调整目录中的图像大小?)。为了完整起见,我在下面包含了我使用的代码,但它们强烈基于上面引用的其他线程或站点。如果有人认为我应该删除,我会这样做!在这两个来源中,用于处理该问题的算法似乎是相同的:双三次插值。然而,在 JAVA 源代码的情况下,在我的实现中,调整大小图像的质量要好得多(甚至无法比较)。当我使用 PHP 源代码时,我做错了吗?如果没有,有人可以解释一下它们之间的区别吗?
Java代码:
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import static org.imgscalr.Scalr.*;
public class App2 {
public static void main(String[] args) throws IOException {
for (File sourceImageFile : new File("imgs").listFiles()) {
if (sourceImageFile.getName().endsWith(".jpg"))
res(sourceImageFile.getAbsolutePath());
}
}
public static void res(String arg) throws IOException {
File sourceImageFile = new File(arg);
BufferedImage img = ImageIO.read(sourceImageFile);
BufferedImage thumbnail = resize(img, 500);
thumbnail.createGraphics().drawImage(thumbnail, 0, 0, null);
ImageIO.write(thumbnail, "jpg", new File("resized/" + sourceImageFile.getName()));
}
}
PHP代码:
<?php
// The file
$filename = 'photos/thePhoto.jpg';
// Set a maximum height and width
$width = 250;
$height = 250;
// Content type
header('Content-Type: image/jpeg');
// Get new dimensions
list($width_orig, $height_orig) = getimagesize($filename);
$ratio_orig = $width_orig/$height_orig;
if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}
// Resample
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
// Output
imagejpeg($image_p, null, 100);
?>
为了清楚起见,在 JAVA 代码中,我必须将图像保存在一个文件夹中。在 PHP 代码中,我提供了文件的名称。当然,我比较了完全相同的图像。此外,这两个代码都在运行,没有任何问题。
![PHP 与 Java(按此顺序)]:http ://www.facebook.com/media/set/?set=a.122440714606196.1073741825.100005208033163&type=1&l=55d93c4969