[APP] Easy Photo Editor

Search This thread

Goddchen

Inactive Recognized Developer
Mar 4, 2010
402
211
Konstanz
Hey everyone,
i have recently found out about the Aviary Photo Editing SDK for Android.
Check it out at http://developers.aviary.com/.

I have quickly put together a nice little app which makes use of this SDK.

The Aviary SDK supports things like adding stickers, text, various photo effects, cropping, rotating, drawing, etc...

You can select your local photos or choose to browse your Facebook photos and those of your Facebook friends.

It also easily integrates with all your existing photo apps: simply use the share/send function of those apps and choose Easy Photo Editor to handle it :)

Check it out at https://market.android.com/details?id=de.goddchen.android.easyphotoeditor or use the qr code :)

chart


Looking forward to your feedback! Feature requests, bugs, etc... :)

Goddchen
 

Attachments

  • device-2012-01-28-123052.jpg
    device-2012-01-28-123052.jpg
    40.5 KB · Views: 369
  • device-2012-01-28-123158.jpg
    device-2012-01-28-123158.jpg
    47.2 KB · Views: 368
  • device-2012-01-28-122351.jpg
    device-2012-01-28-122351.jpg
    40.5 KB · Views: 322
  • icon_512.png
    icon_512.png
    166 KB · Views: 291
Last edited:

Goddchen

Inactive Recognized Developer
Mar 4, 2010
402
211
Konstanz
just published a minor update:

v0.1.2:
* Some small bugfixes
* Fixed some strings
* Fixed focus in webpages import screen

v0.1.1:
* Added many more ways to import photos from different services like (Facebook, Flickr, Dropbox, Picasa/Google+ or any webpage)
 

Goddchen

Inactive Recognized Developer
Mar 4, 2010
402
211
Konstanz
Since the last update, the scroll speed of the gridview has highly increased :) I'm now using the android-generated thumbnails directly, that gave it quite a boost :)

Still happy about any kind of feedback! :)
 

Goddchen

Inactive Recognized Developer
Mar 4, 2010
402
211
Konstanz
Update 0.3 now has the updated Aviary SDK (2.0.3) which features HIRES output! :D Save your edited photos in their original resolution :D
 

Goddchen

Inactive Recognized Developer
Mar 4, 2010
402
211
Konstanz
Published 0.3.2:
Fixes properly saving hires output when sending a photo from Gallery (or similar apps) to Easy Photo Editor via share function.
 

Goddchen

Inactive Recognized Developer
Mar 4, 2010
402
211
Konstanz
New update 0.3.4:
* Preserves original Exif infos
* Edited photos now visible in other gallery apps
 

Goddchen

Inactive Recognized Developer
Mar 4, 2010
402
211
Konstanz
Thanx for removing the .nomedia file!

It still removes the exif data. Maybe you can have another look at the piece of code that's suposed to save it?

Hey,
thanks for the feedback. Could you please give a little more detail (what kind of photo did you choose: camera photo, downloaded photo from the internet, facebook photo, ...? Was hires output successful?) and maybe a logcat? I tried with various files and preserving exif information works fine for me.
 

rogier666

Senior Member
Jan 27, 2011
600
145
androidblog.site666.info
Hiya,

Motorola Defy (stock ROM), camera photo.

The images are saved at the original camera resolution (5 Mpix), but all the exif data is gone.



I/ActivityManager( 1386): Starting activity: Intent { act=android.intent.action.CHOOSER cmp=android/com.android.internal.app.ChooserActivity (has extras) }
D/ViewImage(23050): ViewImage onPause
D/ViewImage HDMI(23050): onPause
D/ViewImage HDMI(23050): Send >>> EXTDISP_CONTROL_DISPLAY hdmi= false tvout = false
D/ViewImage HDMI(23050): Send : com.motorola.intent.action.EXTDISP_CONTROL_DETECTIONhdmi = false tvout = false
I/ActivityManager( 1386): Displayed activity android/com.android.internal.app.ChooserActivity: 992 ms (total 992 ms)
I/ActivityManager( 1386): Starting activity: Intent { act=android.intent.action.SEND typ=image/jpeg flg=0x3000000 cmp=de.goddchen.android.easyphotoeditor/.activities.AviaryActivity (has extras) }
D/de.goddchen.android.easyphotoeditor(23075): android.intent.extra.STREAM = content://media/external/images/media/154
D/ViewImage(23050): ViewImage onStop
V/ImageDecoderLoader(23050): cancelAllTasks
D/ImageProcessor-JNI(23050): time elapsed 0.000000000 in timer ImageProcessor_release
D/ImageProcessor-JNI(23050): time elapsed 0.000305000 in timer ImageProcessor_release
D/ImageProcessor-JNI(23050): time elapsed 0.000031000 in timer ImageProcessor_release
D/ImageProcessor-JNI(23050): time elapsed 0.000214000 in timer ImageProcessor_release
D/ImageProcessor-JNI(23050): time elapsed 0.000000000 in timer ImageProcessor_release
D/ImageProcessor-JNI(23050): time elapsed 0.000244000 in timer ImageProcessor_release
D/ImageProcessor-JNI(23050): time elapsed 0.000000000 in timer ImageProcessor_release
D/ImageProcessor-JNI(23050): time elapsed 0.000244000 in timer ImageProcessor_release
E/Parcel ( 1386): Reading a NULL string not supported here.
I/ActivityManager( 1386): Starting activity: Intent { dat=content://media/external/images/media/154 cmp=de.goddchen.android.easyphotoeditor/com.aviary.android.feather.FeatherActivity (has extras) }
D/FlurryAgent(23075): Initializing Flurry session
D/FlurryAgent(23075): New session
D/FlurryAgent(23075): Initializing AppCircle
I/feather (23075): screen size: 480x854
E/feather (23075): [FeatherActivity] , MAX MEMORY, 30
E/feather (23075): [FeatherActivity] , com.aviary.android.feather.FeatherActivity
I/ActivityManager( 1386): Displayed activity de.goddchen.android.easyphotoeditor/com.aviary.android.feather.FeatherActivity: 285 ms (total 345 ms)
I/image (23075): setImageBitmap: android.graphics.Bitmap@45c41938
E/feather (23075): [FeatherActivity] , final.size: 800x597
W/feather (23075): [FeatherContentProvider] , we need to delere: 0 loitering sessions
W/feather (23075): [FeatherContentProvider] , deleted 0 loitering sessions
I/feather (23075): onLayout: true
E/filter-native(23075): >>> SKBAutoColors::execute time = 73 ms <<<
E/filter-native(23075): >>> HistEqual::execute time = 360 ms <<<
E/filter-native(23075): 800x597 => 800x597
E/filter-native(23075): time: 443 ms (success:1)
E/filter-native(23075): store result in the passed java Bitmap
E/filter-native(23075): (log) total time: 644 ms
I/image (23075): setImageBitmap: android.graphics.Bitmap@45e0c388
I/image (23075): setImageBitmap: android.graphics.Bitmap@45e0c388
W/feather (23075): [FilterManager] , [recycle] original Bitmap: android.graphics.Bitmap@45c41938
D/dalvikvm(22987): GC_FOR_MALLOC freed 11103 objects / 534224 bytes in 33ms
I/image (23075): setImageBitmap: null
I/image (23075): setImageBitmap: null
D/FlurryAgent(23075): Initializing Flurry session
D/FlurryAgent(23075): New session
D/FlurryAgent(23075): Initializing AppCircle
I/ActivityManager( 1386): Displayed activity de.goddchen.android.easyphotoeditor/.activities.AviaryActivity: 9494 ms (total 9494 ms)
D/dalvikvm(23075): GC_FOR_MALLOC freed 19824 objects / 1270976 bytes in 72ms
I/dalvikvm(23075): Jit: resizing JitTable from 8192 to 16384
D/skia-external(23075): SkImageDecoder::Factory
D/skia-external(23075): curr: 0x8120b294
D/skia-external(23075): codec: 0x0
D/skia-external(23075): codec: 0x3a50b0
D/skia-external(23075): codec found
E/filter-native(23075): >>> SKBAutoColors::execute time = 1098 ms <<<
E/filter-native(23075): >>> HistEqual::execute time = 4761 ms <<<
E/filter-native(23075): 2592x1936 => 2592x1936
E/filter-native(23075): time: 6288 ms (success:1)
E/filter-native(23075): Attention, you have leaked bitmaps!!! there are still 1 bitmaps stored
D/skia-external(23075): SK_RELEASE
D/skia-external(23075): SkImageEncoder::Create
D/skia-external(23075): curr: 0x8120b28c
D/skia-external(23075): codec: 0x0
D/skia-external(23075): codec: 0x35ba80
D/skia-external(23075): codec found
D/de.goddchen.android.easyphotoeditor(23075): Preserving exif info
E/de.goddchen.android.easyphotoeditor(23075): Error preserving exif info
E/de.goddchen.android.easyphotoeditor(23075): java.lang.NullPointerException
E/de.goddchen.android.easyphotoeditor(23075): at android.media.ExifInterface.saveAttributes(ExifInterface.java:243)
E/de.goddchen.android.easyphotoeditor(23075): at de.goddchen.android.easyphotoeditor.async.SaveHiresImageAsyncTask.preserveExif(SaveHiresImageAsyncTask.java:122)
E/de.goddchen.android.easyphotoeditor(23075): at de.goddchen.android.easyphotoeditor.async.SaveHiresImageAsyncTask.doInBackground(SaveHiresImageAsyncTask.java:170)
E/de.goddchen.android.easyphotoeditor(23075): at de.goddchen.android.easyphotoeditor.async.SaveHiresImageAsyncTask.doInBackground(SaveHiresImageAsyncTask.java:1)
E/de.goddchen.android.easyphotoeditor(23075): at android.os.AsyncTask$2.call(AsyncTask.java:185)
E/de.goddchen.android.easyphotoeditor(23075): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
E/de.goddchen.android.easyphotoeditor(23075): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
E/de.goddchen.android.easyphotoeditor(23075): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
E/de.goddchen.android.easyphotoeditor(23075): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
E/de.goddchen.android.easyphotoeditor(23075): at java.lang.Thread.run(Thread.java:1096)
E/Parcel ( 1386): Reading a NULL string not supported here.
I/ActivityManager( 1386): Starting activity: Intent { dat=file:///mnt/sdcard/easyphotoeditor/Easy%20Photo%20Editor/1330794047956-hires.jpg cmp=de.goddchen.android.easyphotoeditor/.activities.OutputActivity }
W/InputManagerService( 1386): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@462eda20 (uid=10154 pid=23075)
I/ActivityManager( 1386): Displayed activity de.goddchen.android.easyphotoeditor/.activities.OutputActivity: 514 ms (total 514 ms)
 

Goddchen

Inactive Recognized Developer
Mar 4, 2010
402
211
Konstanz
Thanks rogier666,

the logcat pointed me to a bug in the Android implementation. I have implemented a fix and it is being published right now :) Please try the new update (0.3.6).
 

rogier666

Senior Member
Jan 27, 2011
600
145
androidblog.site666.info
Thanx for the update. It saves some exif data now, but not all of it. The most important tag is still lost.

Camera Model is changed (you're appending "edited with Easy Photo Editor" to the camera model).
The exif tags "creation software," "color representation," lens aperture," and "ISO speed" are lost.
And the horizontal and vertical resolution tags are changed from the original value to 96.

But what really matters is that the "date picture taken" tag is lost, and that messes up the display order in all gallery apps. And of course you can't check back when you shot the pic if you only have the Easy Photo Editor-enhanced copy left.

Changing the original file name into some random number is not such a good idea either. Image file names often hold useful info (like date and time), and file managers tend to sort pictures by file name.
What about keeping the original file name and simply append "hires" to it? If this causes conflicts when you edit the same picture twice, just do something like:
> if filename doesn't contain "hires_*" then append "hires_1"
> if filename contains "hires_*" then increase last digit by one

I tried lots of Android image editors and they all break the exif data.
If your app can preserve all exif tags (especially the "date picture taken" tag) you'll be the first in the android market that gets it right.
If you can preserve the original file name (with a suffix to indicate it's edited) that would be even better.
And if your app can keep all exif data, preserve the file name, and gives us the choice to save edited pics to the same folder as the originals that would be absolutely great.
 

Attachments

  • epe_exif.jpg
    epe_exif.jpg
    118 KB · Views: 126
  • Like
Reactions: boogeyman

Goddchen

Inactive Recognized Developer
Mar 4, 2010
402
211
Konstanz
Thanx for the update. It saves some exif data now, but not all of it. The most important tag is still lost.

Camera Model is changed (you're appending "edited with Easy Photo Editor" to the camera model).
The exif tags "creation software," "color representation," lens aperture," and "ISO speed" are lost.
And the horizontal and vertical resolution tags are changed from the original value to 96.

But what really matters is that the "date picture taken" tag is lost, and that messes up the display order in all gallery apps. And of course you can't check back when you shot the pic if you only have the Easy Photo Editor-enhanced copy left.

Changing the original file name into some random number is not such a good idea either. Image file names often hold useful info (like date and time), and file managers tend to sort pictures by file name.
What about keeping the original file name and simply append "hires" to it? If this causes conflicts when you edit the same picture twice, just do something like:
> if filename doesn't contain "hires_*" then append "hires_1"
> if filename contains "hires_*" then increase last digit by one

I tried lots of Android image editors and they all break the exif data.
If your app can preserve all exif tags (especially the "date picture taken" tag) you'll be the first in the android market that gets it right.
If you can preserve the original file name (with a suffix to indicate it's edited) that would be even better.
And if your app can keep all exif data, preserve the file name, and gives us the choice to save edited pics to the same folder as the originals that would be absolutely great.

Hey,
thanks for the detailed feedback!
I'm actually a bit confused about the results.
I am using Android's native ExifInterface:
http://developer.android.com/reference/android/media/ExifInterface.html

So i am only able to make use of the TAG_* constants that are defined there. Actually i thought TAG_DATETIME is what you are referencing to. But obviously it is not.

To test the exif information in input and output image i was using the app "Jpeg Exif Viewer"
https://market.android.com/details?id=com.ohakado.exifviewx

Could you please see what your results are in this app?

For the file naming convention: good idea, i will give it some thoughts and integrate it soon - won't get to do much on the app until end of the week :(

Goddchen

Goddchen
 

rogier666

Senior Member
Jan 27, 2011
600
145
androidblog.site666.info
Found the problem.

Your app saves all the "android os exif interface" tags, but it only saves some of the standard exif info. It saves the date/time tag, but it loses the data/time digitized and date/time original tags.

My gallery apps (stock and QuickPic) sort images by "date modified." QuickPic and other apps have an option to replace "date modified" with the info from the date/time original tag, but of course this can only work if Easy Photo Editor keeps the date/time original tag.

altered:
file name (date -> random number)

lost (exif):
aperture value
color space
components configuration
compression
date/time digitized !!!
date/time original !!!
exif image height
exif image width
exif version
flashpix version
iso speed ratings
resolution unit
scene capture type
software
thumbnail data
thumbnail length
thumbnail offset
user comment
x resolution
y resolution
ycbcr positioning

added (exif):
f number
light source
metering mode
white balance


Jpeg Exif Viewer doesn't have an "export to text" option, so I've attached screenshots of the output. I also added the original and edited image. I had to zip the pics up 'cos they're too big for the forums jpg file size limit.

Hope this helps in making your app preserve the date/time original and date/time digitized tags. Maybe you can also add an option to replace "date modified" by "date/time original?"

Kodak Perfect Touch and the stock image editor in my Motorola Defy preserve all the exif tags, so it can be done.
 

Attachments

  • exif_tag_blues.zip
    5.6 MB · Views: 13
Last edited:

Goddchen

Inactive Recognized Developer
Mar 4, 2010
402
211
Konstanz
@rogier666
could you try out the attached version? It now uses Apache Sanselan to preserve EXIF info. I will integrate it in the next update if you approve that it's working properly... :)
 

rogier666

Senior Member
Jan 27, 2011
600
145
androidblog.site666.info
I'm on my way to work so I only had time for a quick glance. So far it looks good: all the exif tags survived.

A few suggestions that could make the user interface a little more intuitive:

1) Instead of an "apply" button, what about auto-applying and replacing the "apply" button with an "undo" button? This way moving to the other editing options won't erase your previous edit.

2) What about renaming the "done" button to "save" (that's the obvious thing to look for when you want to save your edits)?

3) And maybe move the undo/save button to the bottom of the screen? That way it sits close to the back button so people will not so easily forget to save their edits before they try to move back to thumbnail grid.

Anyway, it looks like your app is the first (free) photo editor that doesn't kill the exif tags. Congrats!
 

Goddchen

Inactive Recognized Developer
Mar 4, 2010
402
211
Konstanz
@rogier666
thanks for the additions feedback. I will consider it.
But for now the exif feature has priority.
I made a slight change:
I do now set the "Exif Modify Date" to the current date. I think that's more appropriate since the image really was edited. What do you think?

Could please check out the new APK?
 

Top Liked Posts

  • There are no posts matching your filters.
  • 3
    Hey everyone,
    i have recently found out about the Aviary Photo Editing SDK for Android.
    Check it out at http://developers.aviary.com/.

    I have quickly put together a nice little app which makes use of this SDK.

    The Aviary SDK supports things like adding stickers, text, various photo effects, cropping, rotating, drawing, etc...

    You can select your local photos or choose to browse your Facebook photos and those of your Facebook friends.

    It also easily integrates with all your existing photo apps: simply use the share/send function of those apps and choose Easy Photo Editor to handle it :)

    Check it out at https://market.android.com/details?id=de.goddchen.android.easyphotoeditor or use the qr code :)

    chart


    Looking forward to your feedback! Feature requests, bugs, etc... :)

    Goddchen
    1
    Thanx for the update. It saves some exif data now, but not all of it. The most important tag is still lost.

    Camera Model is changed (you're appending "edited with Easy Photo Editor" to the camera model).
    The exif tags "creation software," "color representation," lens aperture," and "ISO speed" are lost.
    And the horizontal and vertical resolution tags are changed from the original value to 96.

    But what really matters is that the "date picture taken" tag is lost, and that messes up the display order in all gallery apps. And of course you can't check back when you shot the pic if you only have the Easy Photo Editor-enhanced copy left.

    Changing the original file name into some random number is not such a good idea either. Image file names often hold useful info (like date and time), and file managers tend to sort pictures by file name.
    What about keeping the original file name and simply append "hires" to it? If this causes conflicts when you edit the same picture twice, just do something like:
    > if filename doesn't contain "hires_*" then append "hires_1"
    > if filename contains "hires_*" then increase last digit by one

    I tried lots of Android image editors and they all break the exif data.
    If your app can preserve all exif tags (especially the "date picture taken" tag) you'll be the first in the android market that gets it right.
    If you can preserve the original file name (with a suffix to indicate it's edited) that would be even better.
    And if your app can keep all exif data, preserve the file name, and gives us the choice to save edited pics to the same folder as the originals that would be absolutely great.