EXIF orientation is now respected and the original rotation angle stored in the database
This commit is contained in:
parent
18bceb367d
commit
7209e21e5a
@ -106,15 +106,43 @@ class ProcessUploadCommand extends Command
|
|||||||
|
|
||||||
// Read the Exif data
|
// Read the Exif data
|
||||||
$exifData = @exif_read_data($photoFile);
|
$exifData = @exif_read_data($photoFile);
|
||||||
|
$angleToRotate = 0;
|
||||||
|
|
||||||
// For debugging:
|
if (isset($exifData['Orientation']))
|
||||||
//dump($exifData);
|
{
|
||||||
|
switch ($exifData['Orientation'])
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
$angleToRotate = 180;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
$angleToRotate = 270;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
$angleToRotate = 90;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($angleToRotate > 0)
|
||||||
|
{
|
||||||
|
$originalPhotoResource = $this->imageHelper->rotateImage($originalPhotoResource, $angleToRotate);
|
||||||
|
|
||||||
|
if ($angleToRotate == 90 || $angleToRotate == 270)
|
||||||
|
{
|
||||||
|
$photo->width = $imageInfo[1];
|
||||||
|
$photo->height = $imageInfo[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$photo->metadata_version = ProcessUploadCommand::METADATA_VERSION;
|
$photo->metadata_version = ProcessUploadCommand::METADATA_VERSION;
|
||||||
$photo->taken_at = $this->metadataDateTime($exifData);
|
$photo->taken_at = $this->metadataDateTime($exifData);
|
||||||
$photo->camera_make = $this->metadataCameraMake($exifData);
|
$photo->camera_make = $this->metadataCameraMake($exifData);
|
||||||
$photo->camera_model = $this->metadataCameraModel($exifData);
|
$photo->camera_model = $this->metadataCameraModel($exifData);
|
||||||
$photo->camera_software = $this->metadataCameraSoftware($exifData);
|
$photo->camera_software = $this->metadataCameraSoftware($exifData);
|
||||||
|
$photo->rotation = $angleToRotate;
|
||||||
$photo->save();
|
$photo->save();
|
||||||
|
|
||||||
// Generate and save thumbnails
|
// Generate and save thumbnails
|
||||||
|
@ -85,4 +85,31 @@ class ImageHelper
|
|||||||
|
|
||||||
return $im;
|
return $im;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function rotateImage($imageResource, $angle)
|
||||||
|
{
|
||||||
|
imagesetinterpolation($imageResource, IMG_SINC);
|
||||||
|
|
||||||
|
return imagerotate($imageResource, $angle, 0);
|
||||||
|
|
||||||
|
/*switch ($angle)
|
||||||
|
{
|
||||||
|
case 90:
|
||||||
|
case 270:
|
||||||
|
// Need a new image canvas
|
||||||
|
$maxDimension = ($photo->width > $photo->height ? $photo->width : $photo->height);
|
||||||
|
$newImageResource = imagecreatetruecolor($maxDimension, $maxDimension);
|
||||||
|
imagecopy($newImageResource, $imageResource, 0, 0, 0, 0, $photo->width, $photo->height);
|
||||||
|
$newImageResource = imagerotate($newImageResource, $angle, 0);
|
||||||
|
$imageResource = $newImageResource;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 180:
|
||||||
|
// We can just rotate this in-place
|
||||||
|
$imageResource = imagerotate($imageResource, $angle, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $imageResource;*/
|
||||||
|
}
|
||||||
}
|
}
|
@ -21,6 +21,7 @@ class AddPhotoMetadataColumns extends Migration
|
|||||||
$table->string('camera_software')->nullable();
|
$table->string('camera_software')->nullable();
|
||||||
$table->integer('width')->nullable();
|
$table->integer('width')->nullable();
|
||||||
$table->integer('height')->nullable();
|
$table->integer('height')->nullable();
|
||||||
|
$table->integer('rotation')->nullable();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,6 +40,7 @@ class AddPhotoMetadataColumns extends Migration
|
|||||||
$table->dropColumn('camera_software');
|
$table->dropColumn('camera_software');
|
||||||
$table->dropColumn('width');
|
$table->dropColumn('width');
|
||||||
$table->dropColumn('height');
|
$table->dropColumn('height');
|
||||||
|
$table->dropColumn('rotation');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user