1

我一直在处理非常小的图像,并试图找到增加它们的最佳方法。我比较了两个不同的来源: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

4

0 回答 0