Pages: 1
I've been geo-referencing my images via a program called GeoSetter before uploading them to my web site. That has worked great for displaying them via Maps & Earth. However, I just noted that the lat/long of some of the images isn't being picked up, despite the fact that multiple other programs can read the lat/long in these files.
Here's a pointer to one gallery: http://www.geoffschultz.org/photos/inde … tegory/184
All of the images are geo-referenced, but only 2 show up. I don't know if this is due to the age of the images and maybe some funky formatting of the data, but I think that who ever is doing the metadata synchronization isn't handling it correctly. Note this is 2.4.1
-- Geoff
Offline
Geoff
Is the box 'Automatically sync from exif' ticked on the Maps & Earth configuration page.
I overlooked that the first time I used it in 2.3, then forgot to tick it again when I did a clean install of 2.4 ;-(.
Offline
The Automatic Sync box is checked. The vast majority of my images automatically sync, but now I'm running into quite a few that won't.
-- Geoff
Offline
Strange - I too use Geosetter, and I have just uploaded a couple of photos which have registered the geo settings in Piwigo perfectly.
You say that quite a few won't, - implying some still do?
Have a look a the geodata using this free programme and see if there are any differences in the content.
http://www.photome.de/
Offline
According to the Maps & Earth plugin, I have 2475 images which are geo-tagged by GeoSetter, so it clearly works. The images which don't work were also geo-tagged by GeoSetter, but are older (1994-1993) images. However, other images from that era do work. I can look at the geo-tags on the images that don't work using PhotoShop and ThumbsPlus, which I use for cataloging/managing my images. As I said, I think that there's something funky with these images that is causing them not to have their geo-location read. Note that other info such as the title (comment) is being read.
-- Geoff
Offline
To close this topic, the problem turned out to be corrupt "makernotes" data that was written by my Olympus E-20 camera. After a very long process of determining the cause of the error, I was able to delete the makernotes from the jpg images using "exiftool -makernotes= filename". Here's a script that I wrote to search for images with the issue. I could determine this by looking for the string "29-1103" in the exif data.
-- Geoff
#Constants for Strings $ExifIDDateTimeTaken = 36867 # 0x9003 $ExifIDImageDescription = 270 # 0x010E $ExifIDMake = 271 # 0x010F $ExifIDModel = 272 # 0x0110 $ExifIDSoftware = 305 # 0x0131 $ExifIDArtist = 315 # 0x013B $ExifIDCopyright = 33432 # 0x8298 $ExifIDGPSLatRef = 1 $ExifIDGPSLongRef = 3 $ExifIDGPSAltRef = 5 #Constants For Unicode strings $ExifIDTitle = 40091 # 0x9C9B XP Title binary data $ExifIDAuthor = 40093 # 0x9C9D XP Author $ExifIDKeywords = 40094 # 0x9C9E XP Keywords $ExifIDSubject = 40095 # 0x9C9F XP Subject #$ExifIDComment = 40092 # 0x9C9C XP Comment $ExifIDComment = 37510 # 0x9286 UserComment #Constants For TOKEN numbers $ExifIDColorSpace = 40961 # 0xA001 $ExifIDContrast = 41992 # 0xA408f $ExifIDExposureMode = 41986 # 0xA402 $ExifIDExposureProgram = 34850 # 0x8822 $ExifIDFlash = 37385 # 0x9209 $ExifIDLightSource = 37384 # 0x9208 $ExifIDMeteringMode = 37383 # 0x9207 $ExifIDSaturation = 41993 # 0xA409 $ExifIDSceneCaptutreMode = 41990 # 0xA406 $ExifIDSharpness = 41994 # 0xA40A $ExifIDSubjectRange = 41996 # 0xA40C $ExifIDWhiteBalance = 41987 # 0xA403 #Constants for special case ratios $ExifIDExposuretime = 33434 # 0x829A $ExifIDGPSLattitude = 2 $ExifIDGPSLongitude = 4 #Constants for normal numbers $ExifIDDigitalZoomRatio = 41988 # 0xA404 $ExifIDExpbias = 37380 # 0x9204 $ExifIDFNumber = 33437 # 0x829D $ExifIDFocalLength = 37386 # 0x920A $ExifIDFocalLengthIn35mmFormat = 41989 # 0xa405 $ExifIDHeight = 40963 # 0xA003 $ExifIDISO = 34855 # 0x8827 $ExifIDMaxApperture = 37381 # 0x9205 $ExifIDWidth = 40962 # 0xA002 $ExifIDGPSAltitude = 6 $ExifIDOrientation = 274 # 0x0112 $ExifIDRating = 18246 # 0x4746 #Constants For Byte Arrays $ExifIDFileSource = 41728 # 0xA300 $ExifIDMakerNote = 37500 # 0x927C $ExifIDGPSVer = 0 Function Get-ExifItem { [CmdletBinding()] <# .Synopsis Returns an single item of Generic Exif data .Description Returns the data part of a single EXIF property item -not the type. .Example C:\PS> Get-ExifItem -image $image -ExifID $ExifIDModel Returns the Camera model string .Parameter image The image from which the data will be read .Parameter ExifID The ID of the required data field. The module defines constants with names beginning $ExifID for the most used ones. #> Param ( [Parameter(ValueFromPipeline=$true)] [__ComObject]$image, $ExifID ) Process { foreach ($id in $exifID) { try {$item = $image.Properties.Item("$ID") } Catch { Write-Verbose "Error getting exif item $ID - probably doesn't exist" ; continue } if ($item) { Write-Verbose "Type is $($item.type)" if (($item.Type -eq 1007) -or ($item.Type -eq 1006) ) { # "Rational"=1006;"URational"=1007 if (($ExifID -eq $ExifIDExposuretime) -and ($item.Value.Numerator -eq 1) ) {"1/$($item.Value.Denominator)"} else {$item.value.value} } elseif (($item.type -eq 1101) -or ($item.type -eq 1100)) {$item.value.string() } # "VectorOfByte"=1101 else {$item.value} } } } } Function Get-Exif{ <# .Synopsis Returns an object containing Exif data .Description Returns an object containing Exif data .Parameter image The image from which the data will be read .Example C:\ps> get-image IMG_1234.JPG | get-exif Returns the exif summary for the specified file .Example C:\ps> Get-exif .\*.JPG | format-table -auto Path, iso,Fnumber,exposuretime Gets the exif data for all the files in the current folder and returns a table of exposure information. #> Param ( [Parameter(ValueFromPipeline=$true,Mandatory=$true)]$image) Process { if ($image -is [system.io.fileinfo] ) {$image = $image.FullName } if ($image -is [String] ) {$image = Get-Image $image} if ($image.count -gt 1 ) {$image | ForEach-Object {Get-Exif $_} ; Return} $myvar =[int](Get-ExifItem -image $image -ExifID $ExifIDFlash) $flash="" If ($myvar –band 1) {$Flash += "Flash fired"} If ($myvar -bAnd 4) {$Flash += ", return" If ($myvar -bAnd 2) {$flash += " detected"} else {$Flash += "not detected"} } If ($myvar -bAnd 8) { If (($myvar-bAnd 16) -eq 16) {$Flash = "Flash Auto, " + $flash} else {$flash = "Flash on, " + $flash} } ElseIf ($myvar -bAnd 16) {$flash = "Flash off. " } If ($myvar -bAnd 32) {$flash = "No Flash function" } If ($myvar -bAnd 64) {$flash += ", Red Eye reduction" } $Keywords = Get-ExifItem -image $image -ExifID $ExifIDKeywords if ($keywords) {$keywords = $keywords.Split(";") } $gps = "" $l=(get-ExifItem -image $image -ExifID $ExifIDGPSLattitude) if ($l.count -eq 3) {$gps += "$($l[0].value)°$($l[1].value)'$($l[2].value)"""} if ($l.count -eq 2) {$gps += "$($l[0].value)°$($l[1].value)'" } $gps = $GPS += (get-ExifItem -image $image -ExifID $ExifIDGPSLatRef) $l=(get-ExifItem -image $image -ExifID $ExifIDGPSLongitude) if ($l.count -eq 3) {$gps += " $($l[0].value)°$($l[1].value)'$($l[2].value)"""} if ($l.count -eq 2) {$gps += " $($l[0].value)°$($l[1].value)'" } $gps = $GPS += (get-ExifItem -image $image -ExifID $ExifIDGPSLongRef) $altref = get-ExifItem -image $image -ExifID $ExifIDGPSAltRef if ($altRef -EQ 0) {$gps += ", $(get-ExifItem -image $image -ExifID $ExifIDGPSAltitude)M above Sea Level"} if ($altRef -EQ 1) {$gps += ", $(get-ExifItem -image $image -ExifID $ExifIDGPSAltitude)M below Sea Level"} $dt = (get-ExifItem -image $image -ExifID $ExifIDDateTimeTaken) if ($dt) {$dt = [DateTime]::ParseExact($dt,"yyyy:MM:dd HH:mm:ss",[System.Globalization.CultureInfo]::InvariantCulture) } New-Object PSObject -Property @{Flash = $flash Keywords = $Keywords GPS = $GPS DateTaken = $dt Path = $Image.FullName Manufacturer = (Get-ExifItem -image $image -ExifID $ExifIDMake) Model = (Get-ExifItem -image $image -ExifID $ExifIDModel) Software = (Get-ExifItem -image $image -ExifID $ExifIDSoftware) Subject = (Get-ExifItem -image $image -ExifID $ExifIDSubject) Title = (Get-ExifItem -image $image -ExifID $ExifIDTitle) Comment = (Get-ExifItem -image $image -ExifID $ExifIDComment) Author = (Get-ExifItem -image $image -ExifID $ExifIDAuthor) Copyright = (Get-ExifItem -image $image -ExifID $ExifIDCopyright) Artist = (Get-ExifItem -image $image -ExifID $ExifIDArtist) StarRating = (Get-ExifItem -image $image -ExifID $ExifIDRating) ISO = (Get-ExifItem -image $image -ExifID $ExifIDISO) ExposureBias = (Get-ExifItem -image $image -ExifID $ExifIDExpbias) Exposuretime = (Get-ExifItem -image $image -ExifID $ExifIDExposuretime) FNumber = (Get-ExifItem -image $image -ExifID $ExifIDFNumber) MaxApperture = (Get-ExifItem -image $image -ExifID $ExifIDMaxApperture) FocalLength = (Get-ExifItem -image $image -ExifID $ExifIDFocalLength) FocalLength35mm = (Get-ExifItem -image $image -ExifID $ExifIDFocalLengthIn35mmFormat) DigitalZoomRatio = (Get-ExifItem -image $image -ExifID $ExifIDDigitalZoomRatio) Height = (Get-ExifItem -image $image -ExifID $ExifIDHeight ) Width = (Get-ExifItem -image $image -ExifID $ExifIDWidth) SubjectRange = @{1="Macro"; 2="Close"; 3="Distant"}[[int]( Get-ExifItem -image $image -ExifID $ExifIDSubjectRange)] ExposureMode = @{0="Auto"; 1="Manual"; 2="Auto Bracket"}[[int]( Get-ExifItem -image $image -ExifID $ExifIDExposureMode)] WhiteBalance = @{0="Auto"; 1="Manual" }[[int]( Get-ExifItem -image $image -ExifID $ExifIDWhiteBalance)] Contrast = @{0="Normal"; 1="Soft"; 2="Hard" }[[int]( Get-ExifItem -image $image -ExifID $ExifIDContrast)] Sharpness = @{0="Normal"; 1="Soft"; 2="Hard" }[[int]( Get-ExifItem -image $image -ExifID $ExifIDSharpness)] Saturation = @{0="Normal"; 1="Low"; 2 ="High"}[[int]( Get-ExifItem -image $image -ExifID $ExifIDSaturation)] Orientation = @{1="0"; 3="180"; 6="270"; 8="90"}[[int]( Get-ExifItem -image $image -ExifID $ExifIDOrientation) ] # (0 -=Row 0 is Top, Col 0 is left / 180=Inverted, Row 0 Bottom and col 0 is Right / 270=90 Degrees CounterClockWise, Row 0 is right and col 0 is top / 90=90 Degrees ClockWise, row 0 is left, Col 0 is bottom ColorSpace = @{1="sRGB"; 2="Adobe RGB" }[[int]( Get-ExifItem -image $image -ExifID $ExifIDColorSpace) ] #'(the value of 2 is not standard EXIF. Instead, an Adobe RGB image is indicated by "Uncalibrated" with an InteropIndex of "R03"') FileSource = @{1="Film scanner"; 2="Print scanner"; 3="Digital still camera"}[[int]( Get-ExifItem -image $image -ExifID $ExifIDFileSource)] CaptureMode = @{0="Standard"; 1="Landscape"; 2="Portrait"; 3="NightScene"}[[int]( Get-ExifItem -image $image -ExifID $ExifIDSceneCaptutreMode)] MeteringMode = @{1="Av"; 2="Centre"; 3="Spot"; 4="Multi-Spot"; 5="Multi-Segment"; 6="Partial"}[[int]( Get-ExifItem -image $image -ExifID $ExifIDMeteringMode)] ExposureProgram = @{1="Manual"; 2="Program: Normal"; 3="Aperture Priority"; 4="Shutter Priority"; 5="Program: Creative"; 6="Program: Action"; 7="Portrait Mode"; 8="Landscape Mode"}[[int]( Get-ExifItem -image $image -ExifID $ExifIDExposureProgram)] # Manual includes Bulb, X-Sync Mode Pentax Sv Mode and TAv mode report 0 - unknown. Creative is Depth of field Biased and Action is shutter biased LightSource = @{0="Auto"; 1="Daylight"; 2="Fluorescent"; 3="Tungsten"; 4="Flash"; 9="Fine Weather"; 10="Cloudy Weather"; 11="Shade"; 12="Daylight Fluorescent"; 13="Day White Fluorescent"; 14="Cool White Fluorescent"; 15="White Fluorescent"; 17="Standard Light A"; 18="Standard Light B"; 19="Standard Light C"; 20="D55"; 21="D65"; 22="D75"; 23="D50"; 24="ISO Studio Tungsten"}[[int]( Get-ExifItem -image $image -ExifID $ExifIDLightSource)] } } } #requires -version 2.0 function Get-Image { <# .Synopsis Returns an image object for a file .Description Uses the Windows Image Acquisition COM object to get image data .Example Get-ChildItem $env:UserProfile\Pictures -Recurse | Get-Image .Parameter file The file to get an image from #> param( [Parameter(ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [Alias('FullName',"FileName")] [ValidateScript({Test-path $_ })][string]$Path) process { foreach ($file in (resolve-path -Path $path) ) { $image = New-Object -ComObject Wia.ImageFile try { Write-Verbose "Loading file $($realItem.FullName)" $image.LoadFile($file.path) $image | Add-Member NoteProperty FullName $File -PassThru | Add-Member ScriptMethod Resize { param($width, $height, [switch]$DoNotPreserveAspectRatio) $image = New-Object -ComObject Wia.ImageFile $image.LoadFile($this.FullName) $filter = Add-ScaleFilter @psBoundParameters -passThru -image $image $image = $image | Set-ImageFilter -filter $filter -passThru Remove-Item $this.Fullname $image.SaveFile($this.FullName) } -PassThru | Add-Member ScriptMethod Crop { param([Double]$left, [Double]$top, [Double]$right, [Double]$bottom) $image = New-Object -ComObject Wia.ImageFile $image.LoadFile($this.FullName) $filter = Add-CropFilter @psBoundParameters -passThru -image $image $image = $image | Set-ImageFilter -filter $filter -passThru Remove-Item $this.Fullname $image.SaveFile($this.FullName) } -PassThru | Add-Member ScriptMethod FlipVertical { $image = New-Object -ComObject Wia.ImageFile $image.LoadFile($this.FullName) $filter = Add-RotateFlipFilter -flipVertical -passThru $image = $image | Set-ImageFilter -filter $filter -passThru Remove-Item $this.Fullname $image.SaveFile($this.FullName) } -PassThru | Add-Member ScriptMethod FlipHorizontal { $image = New-Object -ComObject Wia.ImageFile $image.LoadFile($this.FullName) $filter = Add-RotateFlipFilter -flipHorizontal -passThru $image = $image | Set-ImageFilter -filter $filter -passThru Remove-Item $this.Fullname $image.SaveFile($this.FullName) } -PassThru | Add-Member ScriptMethod RotateClockwise { $image = New-Object -ComObject Wia.ImageFile $image.LoadFile($this.FullName) $filter = Add-RotateFlipFilter -angle 90 -passThru $image = $image | Set-ImageFilter -filter $filter -passThru Remove-Item $this.Fullname $image.SaveFile($this.FullName) } -PassThru | Add-Member ScriptMethod RotateCounterClockwise { $image = New-Object -ComObject Wia.ImageFile $image.LoadFile($this.FullName) $filter = Add-RotateFlipFilter -angle 270 -passThru $image = $image | Set-ImageFilter -filter $filter -passThru Remove-Item $this.Fullname $image.SaveFile($this.FullName) } -PassThru } catch { Write-Verbose $_ } } } } $dirs = @(dir -Path "enter_your_directory_path_here") foreach ($dir in $dirs) { if ($dir.GetType().FullName -eq 'System.IO.DirectoryInfo') { $path = $dir.FullName $path_jpg = $path + "\*.jpg" $files = @(dir $path_jpg) foreach ($file in $files) { $software = @(Get-exif $file) | Select-String "29-1103" if ($software) { $command = '"-makernotes=" ' + $file echo $command &exiftool $command } } } }
Offline
Pages: 1