Apache Ignite не может сериализовать лямбду с удаленного узла

Вот код из моего личного мешка для захвата кода изменения размера изображения. Во-первых, данные, которые вам нужны:

list($originalWidth, $originalHeight) = getimagesize($imageFile);
$ratio = $originalWidth / $originalHeight;

Затем этот алгоритм идеально подходит для изображения в целевом размере, сохраняя исходное соотношение сторон, а не растягивая изображение больше оригинала:

$targetWidth = $targetHeight = min($size, max($originalWidth, $originalHeight));

if ($ratio < 1) {
    $targetWidth = $targetHeight * $ratio;
} else {
    $targetHeight = $targetWidth / $ratio;
}

$srcWidth = $originalWidth;
$srcHeight = $originalHeight;
$srcX = $srcY = 0;

Это обрезает изображение, чтобы полностью заполнить целевой размер, а не растягивать его:

$targetWidth = $targetHeight = min($originalWidth, $originalHeight, $size);

if ($ratio < 1) {
    $srcX = 0;
    $srcY = ($originalHeight / 2) - ($originalWidth / 2);
    $srcWidth = $srcHeight = $originalWidth;
} else {
    $srcY = 0;
    $srcX = ($originalWidth / 2) - ($originalHeight / 2);
    $srcWidth = $srcHeight = $originalHeight;
}

И это делает фактическое изменение размера:

$targetImage = imagecreatetruecolor($targetWidth, $targetHeight);
imagecopyresampled($targetImage, $originalImage, 0, 0, $srcX, $srcY, $targetWidth, $targetHeight, $srcWidth, $srcHeight);

В в этом случае $size представляет собой только одно число для ширины и высоты (квадратный размер цели). Я уверен, что вы можете изменить его, чтобы использовать не-квадратные цели. Это также должно дать вам вдохновение в отношении того, какие другие алгоритмы изменения размера вы можете использовать.

0
задан Gadi 31 December 2018 в 09:58
поделиться