Exif data now captures the taken date/time, camera make, model and software
This commit is contained in:
parent
6e04389e07
commit
d559d09d55
@ -8,6 +8,12 @@ use Symfony\Component\HttpFoundation\File\File;
|
|||||||
|
|
||||||
interface IAlbumSource
|
interface IAlbumSource
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Gets the absolute path or URL to the given photo file.
|
||||||
|
* @param Album $album
|
||||||
|
* @param Photo $photo
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function getPathToPhoto(Album $album, Photo $photo);
|
function getPathToPhoto(Album $album, Photo $photo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -12,6 +12,8 @@ use Illuminate\Support\Facades\Storage;
|
|||||||
|
|
||||||
class ProcessUploadCommand extends Command
|
class ProcessUploadCommand extends Command
|
||||||
{
|
{
|
||||||
|
const METADATA_VERSION = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name and signature of the console command.
|
* The name and signature of the console command.
|
||||||
*
|
*
|
||||||
@ -68,6 +70,7 @@ class ProcessUploadCommand extends Command
|
|||||||
|
|
||||||
private function handlePhoto(UploadPhoto $uploadPhoto)
|
private function handlePhoto(UploadPhoto $uploadPhoto)
|
||||||
{
|
{
|
||||||
|
/** @var Photo $photo */
|
||||||
$photo = $uploadPhoto->photo;
|
$photo = $uploadPhoto->photo;
|
||||||
$this->output->writeln(sprintf('Analysing photo #%d: %s', $photo->id, $photo->name));
|
$this->output->writeln(sprintf('Analysing photo #%d: %s', $photo->id, $photo->name));
|
||||||
|
|
||||||
@ -77,6 +80,60 @@ class ProcessUploadCommand extends Command
|
|||||||
|
|
||||||
$photoFile = $albumSource->getPathToPhoto($album, $photo);
|
$photoFile = $albumSource->getPathToPhoto($album, $photo);
|
||||||
|
|
||||||
dump(@exif_read_data($photoFile));
|
$exifData = @exif_read_data($photoFile);
|
||||||
|
dump($exifData);
|
||||||
|
|
||||||
|
$photo->metadata_version = ProcessUploadCommand::METADATA_VERSION;
|
||||||
|
$photo->taken_at = $this->metadataDateTime($exifData);
|
||||||
|
$photo->camera_make = $this->metadataCameraMake($exifData);
|
||||||
|
$photo->camera_model = $this->metadataCameraModel($exifData);
|
||||||
|
$photo->camera_software = $this->metadataCameraSoftware($exifData);
|
||||||
|
$photo->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function metadataCameraMake(array $exifData)
|
||||||
|
{
|
||||||
|
if (isset($exifData['Make']))
|
||||||
|
{
|
||||||
|
return $exifData['Make'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function metadataCameraModel(array $exifData)
|
||||||
|
{
|
||||||
|
if (isset($exifData['Model']))
|
||||||
|
{
|
||||||
|
return $exifData['Model'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function metadataCameraSoftware(array $exifData)
|
||||||
|
{
|
||||||
|
if (isset($exifData['Software']))
|
||||||
|
{
|
||||||
|
return $exifData['Software'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function metadataDateTime(array $exifData)
|
||||||
|
{
|
||||||
|
$dateTime = null;
|
||||||
|
if (isset($exifData['DateTime']))
|
||||||
|
{
|
||||||
|
$dateTime = $exifData['DateTime'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_null($dateTime))
|
||||||
|
{
|
||||||
|
$dateTime = preg_replace('/^([\d]{4}):([\d]{2}):([\d]{2})/', '$1-$2-$3', $dateTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $dateTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,17 @@ class Photo extends Model
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'album_id', 'name', 'description', 'file_name', 'mime_type', 'file_size'
|
'album_id',
|
||||||
|
'name',
|
||||||
|
'description',
|
||||||
|
'file_name',
|
||||||
|
'mime_type',
|
||||||
|
'file_size',
|
||||||
|
'metadata_version',
|
||||||
|
'taken_at',
|
||||||
|
'camera_make',
|
||||||
|
'camera_model',
|
||||||
|
'camera_software'
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
|
class AddPhotoMetadataColumns extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('photos', function (Blueprint $table) {
|
||||||
|
$table->dateTime('taken_at')->nullable();
|
||||||
|
$table->integer('metadata_version')->nullable();
|
||||||
|
$table->string('camera_make')->nullable();
|
||||||
|
$table->string('camera_model')->nullable();
|
||||||
|
$table->string('camera_software')->nullable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('photos', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('taken_at');
|
||||||
|
$table->dropColumn('metadata_version');
|
||||||
|
$table->dropColumn('camera_make');
|
||||||
|
$table->dropColumn('camera_model');
|
||||||
|
$table->dropColumn('camera_software');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user