我正在开发一个自定义脚本,以将照片从FTP文件夹导入Wordpress。由于由于特定的客户请求,我不包括wp-load
,因此无法使用$ wpdb等各种类……
所以我不得不创建整个脚本,但是发现在应用水印的情况下调整照片大小的问题...
此脚本会拾取文件夹中的照片,将高质量的原始照片移到公开的隐藏文件夹中,然后再以较低的分辨率创建副本并在上面应用水印。
这是循环文件夹中包含的每张照片的主要功能:
function generate_resized_image($path_to, $path_from, $image, $sell_media_dir){
$upload_dir = wp_upload_dir();
$all_size = array(
'1' => array('width'=>150, 'height'=>150), //thumbnail
'2' => array('width'=>620, 'height'=>357), //medium
'3' => array('width'=>768, 'height'=>442), //medium_large
'4' => array('width'=>100, 'height'=>70), //very-small
'5' => array('width'=>300, 'height'=>200), //max-user-view
);
rename(str_replace(".jpg", ".JPG", $path_from), str_replace(".JPG", ".jpg", $path_to));
$newname = explode(".", $image);
foreach($all_size as $size){
//$path_to_save = $sell_media_dir."/".$newname[0]."-".$size['width']."x".$size['height'].".jpg";
$path_to_sell = $upload_dir['path']."/".$newname[0]."-".$size['width']."x".$size['height'].".jpg";
$img = resize_image( str_replace( ".JPG", ".jpg", $path_to ), $size['width'], $size['height'], $cut=($size['width'] == $size['height']) ? true : false);
imagejpeg($img, $path_to_sell, 10);
echo 'Immagine creata: ' . $newname[0]."-".$size['width']."x".$size['height'].".jpg ". PHP_EOL;
//rename($path_to_save, $path_to_sell);
}
$or_image = imagecreatefromjpeg( str_replace( ".JPG", ".jpg", $path_to ) );
imagejpeg($or_image, $upload_dir['path']."/".str_replace(".JPG",".jpg",$image), 10);
$img_size = getimagesize($upload_dir['path']."/".str_replace(".JPG",".jpg",$image));
return array(
'width' => $img_size[0],
'height' => $img_size[1]
);
}
此调用函数resize_image
,理论上,该函数通过应用上面的水印来调整图像的大小。
function resize_image($file, $w, $h, $crop=FALSE) {
$stamp = imagecreatefrompng('./wp-content/uploads/2018/11/spanshot_watermark.png');
list($width, $height) = getimagesize($file);
$r = $width / $height;
if ($crop) {
if ($width > $height) {
$width = ceil($width-($width*abs($r-$w/$h)));
} else {
$height = ceil($height-($height*abs($r-$w/$h)));
}
$newwidth = $w;
$newheight = $h;
} else {
if ($w/$h > $r) {
$newwidth = $h*$r;
$newheight = $h;
} else {
$newheight = $w/$r;
$newwidth = $w;
}
}
$src = imagecreatefromjpeg($file);
$w = imagesx($src);
$h = imagesy($src);
$stamp = PNGResize($stamp, $w, $h);
$sx = imagesx($stamp);
$sy = imagesy($stamp);
// $par1 = (imagesx($src)/2)-($sx/2);
// $par2 = (imagesy($src)/2)-($sy/2);
imagecopy($src, $stamp, 0, 0, 0, 0, imagesx($stamp), imagesy($stamp));
echo "La lunghezza nuova è: " . $newwidth . PHP_EOL;
echo "L'altezza nuova è: " . $newheight . PHP_EOL;
$dst = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
return $src;
}
最后,此函数调用PNGResize
来调整水印的大小,同时保持透明度,从而使后者适应要调整大小的图像的大小。
function PNGResize($image, $w, $h)
{
$oldw = imagesx($image);
$oldh = imagesy($image);
$temp = imagecreatetruecolor($w, $h);
imagealphablending( $temp, false );
imagesavealpha( $temp, true );
imagecopyresampled($temp, $image, 0, 0, 0, 0, $w, $h, $oldw, $oldh);
return $temp;
}
除了调整可移动图像的大小外,所有这些操作均正常工作,可移动图像的大小与参数无关紧要,从而降低了质量。
这些是正确移动但没有适当调整大小的图像。
我不明白为什么图片没有根据过去的尺寸调整大小,有人可以帮我吗?
答案 0 :(得分:1)
在您的resize_image
函数中,您将返回$src
,该值应随$dst
(已调整大小的图像)而改变。
因此,在您的函数中,将return $src;
行更改为return $dst;
,它将起作用。