[ 
https://issues.apache.org/jira/browse/IMAGING-285?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17396499#comment-17396499
 ] 

Gilles Sadowski commented on IMAGING-285:
-----------------------------------------

{quote}The RationalNumbers handling in the TIFF/EXIF formats is pretty narrow 
and specialized. So it won't benefit from Commons Numbers, [...]
{quote}
At a glance, it seemed that the {{RationalNumber}} class and the {{Fraction}} 
class mentioned above had a lot in common.
Is there some particular feature that would prevent that the latter be a 
replacement for the former?

{quote}I didn't realize that Commons Numbers existed.
{quote}
{{Fraction}} and {{BigFraction}} were part of "Commons Math" until the last 
official release (v3.6.1) and several improvements (including bug-fixes) were 
made after they had been ported to "Commons Numbers".

bq. Cool stuff.

;-)
IMHO, some "consolidation" of the Commons components would be beneficial for 
all of them, and their users...

> Decoding of Rational Numbers broken when large values present
> -------------------------------------------------------------
>
>                 Key: IMAGING-285
>                 URL: https://issues.apache.org/jira/browse/IMAGING-285
>             Project: Commons Imaging
>          Issue Type: Bug
>          Components: imaging.common.*
>    Affects Versions: 1.0-alpha2
>            Reporter: John Andrade
>            Priority: Major
>         Attachments: DJI_0267 cropped.JPG
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> Decoding Lat/Long EXIF data from JPEGs does not work for some values.  I have 
> attached a file where the conversion fails.  I used the 
> getLatitudeAsDegreesNorth and getLongitudeAsDegreesEast methods from the 
> TiffImageMetaData.GPSInfo class.  The values are close, but seemingly off by 
> a few miles.
> I've traced the source and I believe the issue is with how the RationalNumber 
> class uses two 32-bit signed integers for the numerator and denominator.  The 
> definition of a RATIONAL data type uses 32-bit unsigned numbers.  It seems as 
> if the RationalNumber class already expects this as it has a non-public 
> static method called factoryMethod to create a RationalNumber from two 64-bit 
> numbers.
> This error is introduced in the ByteConversions class, specifically the 
> toRational method where it uses the regular RationalNumber constructor and 
> thus ensures any rational numbers that have numerator or denominator greater 
> than the max signed 32-bit value will produce invalid values.
> I am attaching a JPEG that has this problem.  I had to crop it to reduce the 
> size, but the EXIF data was preserved.
> The EXIF GPS data contained in the JPEG is:
> GpsLatitudeRef: "N"
> GpsLatitude: 38, 1, 36, 1, 4120083230, 70000000
> GpsLongitudeRef: "W"
> GpsLongitude: 90, 1, 12, 1, 2379156648, 70000000
> According to the properties of the image (right-clicking on Windows 10), the 
> L/L of the image is:
> Latitude: 38: 36: 58.85833....
> Longitude: 90: 12: 33.98795... (Windows doesn't show E/W)
> These values convert to:
> 38.616349536627
> -90.2094410978095
> When I use the getLatitudeAsDegreesNorth  and getLongitudeAsDegreesEast 
> methods, I get the following values:
> 38.59930601561111
> -90.19239757679365
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to