快速简介。我们目前必须根据我们网站上的产品图片制作小型,中型和大型图片。不是PHP的wiz我认为我仍然会尝试自动化这场噩梦。
我们上传的图片和拇指的尺寸在
之下800 width x 1400 width LARGE
300 width x 525 width THUMB
我的PHP脚本的问题在于它只是根据比例调整大小。我希望它能像Photoshop一样缩小,你只需点击移动,图像就可以缩放。我试图使用imagecopyresized
,但运气不佳。
<?php
// PHP UPLOAD SCRIPT
// VALIDATION OF FORM
if($_FILES['user_image']['type'] == "image/jpeg" && $_FILES['user_image']['size'] < 3000000)
{
// VARS
$target_folder = 'images/';
$upload_image = $target_folder.basename($_FILES['user_image']['name']);
// UPLOAD FUNCTION
if(move_uploaded_file($_FILES['user_image']['tmp_name'], $upload_image))
{
// VARS FOR FILE NAMES
$thumbnail = $target_folder."medium_x.jpg";
$actual = $target_folder."large_x.jpg";
// THUMBNAIL SIZE
list($width, $height) = getimagesize($upload_image);
$newwidth = "300";
$newheight = "525";
// VARS FOR CALL BACK
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($upload_image);
// RESIZE WITH PROPORTION LIKE PHOTOSHOP HOLDING SHIFT
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
// MAKE NEW FILES
imagejpeg($thumb, $thumbnail, 100);
// FILE RENAMES
rename($upload_image, $actual);
{
// SUCCESS MESSAGES
?>
<p>
Image Successfully uploaded!<br />
Actual image: <?=$actual;?><br />
Thumbnail image: <?=$thumbnail;?><br />
<h1>Large</h1>
<img src="<?=$actual;?>"/><br /><br />
<h1>Medium</h1>
<img src="<?=$thumbnail;?>"/><br /><br />
</p>
<?
}
// FAILED MESSAGES
}
else
{
echo 'Upload failed.';
}
}
else
{
// NOT A JPEG
echo 'Not a JPEG';
}
// END OF SCRIPT
?>
如何在没有拉伸图像的情况下正确调整大小?有可能吗?
答案 0 :(得分:8)
在没有PHP代码存储桶的情况下实现这一目标的最简单方法是使用Image Magick。请参阅示例和示例命令行:http://www.imagemagick.org/Usage/resize/#fill
(可以使用exec()或类似方法从PHP调用)
修改:实施步骤如下:
if($_FILES['user_image']['type'] == "image/jpeg" && $_FILES['user_image']['size'] < 3000000)
{
// VARS
$target_folder = 'images/';
$upload_image = $target_folder.basename($_FILES['user_image']['name']);
$thumbnail = $target_folder."medium_x.jpg";
$actual = $target_folder."large_x.jpg";
$newwidth = "300";
$newheight = "525";
if(move_uploaded_file($_FILES['user_image']['tmp_name'], $upload_image))
{
exec('convert '.$upload_image.' -resize '.$newwidth.'x'.$newheight.'^ '.$thumbnail);
rename($upload_image, $actual);
}
}
...
etc
您可以优化处理上传的方式,但我不想完全改变代码的结构,因为我不知道它周围的内容。但基本上,你将图像推送到ImageMagick的convert
,它将起到魔力的作用。
如果你想裁剪和缩放,exec命令将是:
exec('convert '.$upload_image.' -resize '.$newwidth.'x'.$newheight.'^ -gravity center -extent '.$newwidth.'x'.$newheight.' '.$thumbnail);
答案 1 :(得分:1)
请查看此代码段。你需要什么主要用于在创建拇指时保持比例。 http://snipplr.com/view/753/