私は非常に小さな画像を扱ってきましたが、それらを増やす最善の方法を見つけようとしました。imagecopyresampled (PHP: http://www.php.net/manual/en/function.imagecopyresampled.php ) と Scalr (JAVA: How to resize images in a directory? ) の 2 つの異なるソースを比較しました。完全を期すために以下に使用しているコードを含めていますが、それらは上記で参照されている他のスレッドまたはサイトに強く基づいています. 誰かが私が削除すべきだと思うなら、私は削除します!両方のソースで、問題に対処するために使用されるアルゴリズムは同じように見えます: バイキュービック補間。ただし、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