Как обеспечить правильную ориентацию для загрузки изображенияPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как обеспечить правильную ориентацию для загрузки изображения

Сообщение Anonymous »

Я использую библиотеку GD, чтобы объединить два или более двух изображений в воспламенении кода. Комбинированная часть работает нормально. Но если я открываю какое -либо изображение в своей системе и поверну изображение, а затем попытаюсь объединить изображение, он объединяется с вращающимся способом. Означает, что мне нужно всегда объединить изображение с правильной ориентацией. Если любое изображение не находится в правильной ориентации, то изображение должно быть в правильной ориентации, затем объедините, ниже мой код. < /P>

Код: Выделить всё

       private function combine_images($tmp_files, $output_path)
{
$merged_image_width = 0;
$merged_image_height = 0;
$image_resources = [];

// Load images, fix orientation, and calculate dimensions for the merged image
foreach ($tmp_files as $tmp_file) {
$temp_resource = null;

// Load the image based on its MIME type
switch (mime_content_type($tmp_file)) {
case 'image/jpeg':
$temp_resource = imagecreatefromjpeg($tmp_file);
break;
case 'image/png':
$temp_resource = imagecreatefrompng($tmp_file);
break;
default:
throw new Exception("Unsupported image type: " . mime_content_type($tmp_file));
}

// Fix orientation, if needed
$temp_resource = $this->fix_orientation_and_normalize($tmp_file, $temp_resource);

// Get dimensions after fixing the orientation
$width = imagesx($temp_resource);
$height = imagesy($temp_resource);

$image_resources[] = $temp_resource;

$merged_image_width = max($merged_image_width, $width); // Use the widest image
$merged_image_height += $height; // Total height for vertical stacking
}

// Create the merged image
$merged_image = imagecreatetruecolor($merged_image_width, $merged_image_height);
$y_offset = 0;

// Copy each image into the merged image
foreach ($image_resources as $image_resource) {
imagecopy($merged_image, $image_resource, 0, $y_offset, 0, 0, imagesx($image_resource), imagesy($image_resource));
$y_offset += imagesy($image_resource); // Increment vertical offset
imagedestroy($image_resource); // Free memory for each resource
}

// Save the merged image
$merged_image_path = $output_path . '/merged_image_' . time() . rand(10, 30) . '.jpg';
imagejpeg($merged_image, $merged_image_path, 100); // Save with maximum quality
imagedestroy($merged_image); // Free the merged image resource

return $merged_image_path;
}

private function fix_orientation_and_normalize($file_path, $image_resource)
{
$exif = @exif_read_data($file_path);

if (!empty($exif['Orientation'])) {
switch ($exif['Orientation']) {
case 3: // Rotate 180 degrees
$image_resource = imagerotate($image_resource, 180, 0);
break;
case 6: // Rotate 90 degrees clockwise
$image_resource = imagerotate($image_resource, -90, 0);
break;
case 8: // Rotate 90 degrees counter-clockwise
$image_resource = imagerotate($image_resource, 90, 0);
break;
}
}

// Normalize by resetting EXIF orientation (if you save the image later)
if (function_exists('imagejpeg')) {
$temp_path = sys_get_temp_dir() . '/temp_' . uniqid() . '.jpg';
imagejpeg($image_resource, $temp_path, 100);
$image_resource = imagecreatefromjpeg($temp_path); // Reload normalized image
unlink($temp_path); // Clean up temporary file
}

return $image_resource;
}

Пример изображений:



Подробнее здесь: https://stackoverflow.com/questions/793 ... load-image
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»