Я разрабатываю собственный скрипт для импорта фотографий из папки 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;
}
Все это работает правильно, за исключением изменения размера подвижных изображений, которые не влияют на исходные размеры по сравнению с параметрами, что снижает качество.
Это оригинальные изображения в нужной папке:
![enter image description here](https://i.stack.imgur.com/5wnIs.png)
И это изображения, правильно перемещенные, но не правильно измененные.
Я не понимаю, почему изображения не меняются в соответствии с прошлыми измерениями, кто-то может мне помочь?