Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
I've searched on this topic but the only suitable threads I can find are dated 2008 hence my new question.
I'm looking at developing a program using C# .Net 4.0 language. The aim of my program will be to extract EXIF information from jpegs (Manufacturer, Model, Geolocation info etc...) and then populate this into a MySql / Sql server DB.
Can anybody recommend any good libraries that may be suitable for this project? I would be looking for camera serial numbers too (I know this varies from manufacturer to manufacturer) but if anybody knows of any existing libraries that address this, it'd be most helpful.
Thanks and enjoy the weekend
The metadata-extractor project has been alive and well since 2002 for Java, and is now available for .NET 3.5 and above. There is also a PCL version.
Open source (Apache 2.0)
Heavily tested and widely used
Supports many image types (JPEG, TIFF, PNG, WebP, GIF, BMP, ICO, PCX...)
Supports many metadata types (Exif, IPTC, XMP, JFIF, ...)
Supports many manufacturer-specific fields (Canon, Nikon, ...)
Very fast (fully processes ~400 images totalling 1.33GB in ~3 seconds) with low memory consumption
It's available via NuGet or GitHub.
Sample usage:
IEnumerable<Directory> directories = ImageMetadataReader.ReadMetadata(path);
foreach (var directory in directories)
foreach (var tag in directory.Tags)
Console.WriteLine($"{directory.Name} - {tag.TagName} = {tag.Description}");
(Disclosure: I maintain this library)
This CodeProject article was written just last month, and its API is a big improvement over some of the other .NET EXIF readers:
http://www.codeproject.com/Articles/36342/ExifLib-A-Fast-Exif-Data-Extractor-for-NET-2-0
It's also available over Nuget, and is licensed under the CPOL.
For basic EXIF information(manufacturer, camera model, time, aperture, etc.), I would look at the System.Drawing.Image class - in particular the PropertiesItems collection.
There are disadvantages to this class. It requires loading the entire image into memory before retrieving the EXIF info (i.e. it is somewhat slow). It also does not handle all of the vendor specific fields that aren't uniform from camera to camera.
Image.PropertyItems
MSDN: Reading Image Metadata
PropertyItem.Id
I have used it with great success to collect information about my photo collection (tens of thousands of photos taken with a dozen different digital cameras of various makes and models).
Related
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
I'm writing a Web app that allows a user to upload and store files; however I'd like to add a simple version history feature to the files they upload based on the file name.
Is there an existing framework/module I can integrate for the version history part or is it better for me to write it up myself? I feel like there could be a lot of plumbing that's already been done in a framework. I couldn't find any and most of my Google searches turned up actual project version control software.
I'm looking at using .NET and C# to make this Web app.
I don't know of any libraries off the top of my head, but this is something I would probably roll myself anyway. The solution is simple. Take a SHA-1 (or other appropriate) hash of the file bytes, and use that as the filename/primary key in your backing store for that version of the file. This is called 'content-addressable', and is a simplified version of what git does.
One possible benefit of this is that if 2 users upload identical versions of a file, you only have to store it once.
Then you just need an list somewhere that tracks which hashes go in which order for a given user filename.
EDIT:
Its also worth noting that if you were not dealing with blobs, but structured data or your app objects, you might get much of this functionality from your data store via SQL triggers, or the RavenDB versioning bundle, for example.
I would use a version control system, like Subversion. This will be really reliable, easily integrable, it will offer history (with great details) and capability to download any of the past versions. Bonus: you can even diff two versions (obviously this make sense only for text based file types).
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
I work for a small E-Commerce shop and we are looking for a process that will handle resizing our product images dynamically. Currently our designers take high resolution photos, either provided by the manufactures or created in house, and alter them to fit various pages on our site. The designers are constantly resizing, cropping, altering compression levels, etc., of each product photo to fit the needs of the business. Being that our product line is updated frequently, this becomes a monotonous task.
Abobe Scene7 does exactly what we are looking to do and the images are served up from a CDN. Unfortunately we found it to be too expensive.
I'm curious to learn how others handle this process at their organizations. Does anyone know of any good 3rd party tools or other SAAS providers that can handle performing some basic image manipulation and serving them on the fly?
A lot of what you describe can be accomplished using components available in the .NET framework.
We've used the COM version of ImageGlue with great success and found it to be very stable and effective. When someone uploads an image through our admin site, I use ImageGlue to generate a thumbnail and resize the image before storing it. You could also do that dynamically by having your image tags refer to a url like
<img src="/services/image?id=1231231&w=200&keepAspect=1">
and have the Image page or service generate the image and stream it back to the browser.
This doesn't address issues like content delivery networks, but it's relatively inexpensive and might get you pointed in the right direction.
The ImageResizing.Net library offers Amazon CloudFront-compatible dynamic image resizing - you get instantly resized dynamic images, and the scalability and responsiveness of edge caching.
While the core library is MIT-free, the Cloud bundle costs $99 (but includes source code and redistribution rights).
There isn't a hosted service version yet, but there may be soon. Vote for the idea if you want it quicker.
-- The Author
Uploadcare is an IaaS solution for uploading images directly to the CDN, and crop, resize and transform uploaded images using URL commands:
https://uploadcare.com
For example, here is the full version of an image (which is quite heavy, 4034x2672px):
http://www.ucarecdn.com/6fdab0d5-5a07-4b34-8a3a-f61727972745/full.jpg
And here is a cropped and resized one:
http://www.ucarecdn.com/6fdab0d5-5a07-4b34-8a3a-f61727972745/-/crop/1000x1000/1300,1600/-/resize/300x/tree.jpg
More info: https://uploadcare.com/upload-api-cloud-storage-and-cdn/#crop-resize-and-transform-uploaded-images
Note: I am a co-founder :)
Webqem is an Australian based company that offers a SAAS solution to dynamic imaging at a very competitive rate.
Check out the website at http://www.maxoom.com.au, there are a number of videos showing how functions within the service work.
The easiest has to be http://getthumbsup.com. We use it in conjunction with imgur sideloading feature http://api.imgur.com/resources_anon#sideloading flawlessly and effortlessly.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
I'm working on a project which generates (composite) Microsoft Word documents which are comprised of one or more child documents. There are tens of thousands of permutations of the composite documents. Far too many for users to easily manage. Users will need to view/edit the child documents through the app which hides all of the nasty implementation details. A requirement of the system is that the child documents must be version controlled. That is what has been tripping me up.
I've been torn between using an off-the-shelf solution or rolling my own. At a minimum, the system needs to support get latest, get specific version, add new, rename and possibly delete. I’ve whiteboarded it enough to realize it won’t be a trivial task to create my own. As far as commercial systems I have VSS and TFS at my disposal. I've played with the TFS API some, but it isn’t as intuitive or well documented as I had hoped. I'm not averse to an open source solution (e.g. SVN), but I have less familiarity with them.
Which approach or tool would you recommend? Why? Do you have any links to API documentation you would recommend?
Environment: C#, VS2008, SQL Server 2005/2008, low volume (a few hundred operations per day)
SharePoint does a pretty good job of document management, with versioning, etc. It also has plenty of APIs and is a much more modern approach than using the COM layer for VSS. SP would be a good solution if you are writing this as an enterprise solution (dedicated server, etc), but not so good for a desktop or small-business/SOHO app.
Its actually pretty easy to get rolling with document versioning in Sharepoint. If you setup a new list you will be able to define version options for attachments and list items right in the SP list settings.
You can also get a much more detailed control over versioning by using the SP webservices. If your planning on doing all of your document access from within your application, and don't want to have to push users into the Sharepoint site I would use this approach. Here is a good tutorial to get started with SP versioning
Give a try to Plastic SCM. It's distributed, has a great GUI, it can work as centralized too and you'll find tons of .NET assemblies to hook your code.
alt text http://www.codicesoftware.com/images3mk/screenshots/visualize_4.JPG
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 2 years ago.
Improve this question
I'm looking at implementing spatial queries in .NET without using SQL2008. The first requirement is to be able to create a (BTree styled) spatial index and be able to query it.
Although SQL 2008 ships with .NET libraries for the types, you need to use SQL for the spatial indexes.
Has anybody used any .NET libraries for spatial data (OS or commercial)? I am looking at NetTopologySuite but it looks quiet and I don't want a dead library.
SharpMap is a (well known and used) OpenSource collection of spatial libraries for .NET
http://www.codeplex.com/SharpMap
Commercial libraries from ESRI would be the most widely used.
Can I ask why you don't want to use SQL for creating spatial indexes?
http://msdn.microsoft.com/en-us/library/bb964712.aspx
If you don't want to create indexes in the database then you will be stuck using shapefiles:
http://mapserver.org/utilities/shptree.html
Update
I've not used NTS or JTS, but there is also a C++ implementation of JTS at http://trac.osgeo.org/geos/ which has an active user community, and I've used on a couple of projects.
Shapely http://gispython.org/shapely/manual.html builds on GEOS in Python. If you are doing everything in "the cloud" then it may be worth reading this article - http://sgillies.net/blog/986/manipulimization-of-whatchamacallems/
Re indexes - I found SQL Server + spatial indexes to outperform shapefile + indexes with the same data. If you require the indexes for displaying data then tile caches would perform far better than any indexing.
Python seems to have become one of the key languages in GIS. There is also an R-type index library - http://pypi.python.org/pypi/Rtree/
NTS is good...
Other stuff which may be useful now or later:-
GDAL/OGR for accessing different raster/vector formats
PROJ4 for handling projections and transformations
(Check out FWTOOLS download for the above in 1 install)
You should check out Mapwindow too... ver 6 is all re-written in .NET should be out soon if not out yet.. saw it at FOSS4G in Sydney.
http://www.mapwindow.org/
Of course PostGRES with PostGIS is a very powerful spatial database you can access from .NET
Also check out SQLLite which has spatial extensions for vector dat, and now RasterLite!!
Geoserver or Mapserver if you want to web enable anything.
Other general GIS apps to checkout:
GRASS and SAGA
A Simple for QuadTree
http://www.codeproject.com/KB/recipes/QuadTree.aspx
I would suggest DotSpatial
its MIT licensed
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 4 years ago.
Improve this question
Last week i searched for good free or opensource solutions and component for GIS (Geographical Information Systems) I founded some system but no one fill my requirements
SharpMap is very buggy software
Gmap.net is very slow
MapWindow have a very complex structure and is very buggy.
I founded uDIG but is in java, i need a solution in vb.net or c#.
Anyone know a good solution that fill my requirements or have alternatives, i accept solutions?
You are limiting yourself a lot by insisting on .NET. I don't know of anything other than SharpMap or MapWinGIS ActiveX (MapWindow). Here are some free, but not .NET, options for Windows desktop applications.
If you'd consider writing your standalone application in Python or C++:
Mapnik
QGIS
Or if you'd consider writing a plug-in or a customisation for an existing GIS:
GRASS can be customised in Python, Perl, Ruby...
QGIS can be customised in Python
I think that you've covered it already. There really aren't any production quality open source GIS project out there using C#. Most of the good work is being done in Java, C/C++ or Python these days. If you must use the .NET Framework then I think the best of the bunch is indeed SharpMap.
Failing that you need to look at commercial products from companies like http://www.esri.com. Of course, it also depends on what you need: web services, Windows Forms control, WPF, etc. In the past I've managed to whip up some C# that constructed the right XML to send to a Java server-based mapping engine, so you could look at something like GeoServer and build your own client. Obviously not what you want to get in to but I don't see that you have many options beyond the ones you've listed.
I would recommend to look in to MapAround
Have you checked out SharpMap? It's available on codeplex.
MapSurfer.NET framework might be a good option.
MapSurfer.NET is free, modern cartographic framework which is able to provide maps of superior cartographic quality. This framework supports a bunch spatial data formats (e.g., Shape files, PostgreSQL, OSM, etc.) and web services (e.g., CartoDB, Mapzen, etc.). Furthermore, its setup includes MapSurfer.NET Studio application which allows creating and editing map styles (analogue of TileMill). Its symbology is inspired by both OGC specifications and other similar toolkits such as MapServer, GeoServer or Mapnik.
We use Mapzania (http://www.mapzania.com).
The best thing about it is that you load it into existing web-applications via a NuGet package and then you get a bunch of GIS functionality.
It uses Leaflet as its front-end and it has JS library that makes it easy to do stuff to Leaflet.
It also has a nice MapStyler for creating and editing maps.