There are various ways to retrieve when using Carrierwave. They are as follows:
Using RMagick gem:
class ImageUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick process :store_dimensions private def store_dimensions if file && model model.width, model.height = ::MiniMagick::Image.open(file.file)[:dimensions] end end end
Using ImageMagick gem:
class ImageUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick process :store_dimensions private def store_dimensions if file && model model.width, model.height = ::MiniMagick::Image.open(file.file)[:dimensions] end end end
These are pretty good ways to retrieve image dimensions on server-side.
It would be much more easier if we could handle it on client-side (JQuery).
There could be many ways to do so. Below is the way I adopted in one of the project using FileReader API.
$("input[type='file']").live 'change', (e) -> file = this.files[0] reader = new FileReader() img = new Image() reader.onload = (e) -> img.src = e.target.result img.onload = (e) -> console.log(this.width()) console.log(this.height()) reader.readAsDataURL(this.files[0]);
This worked in my case and I was able to restrict the image-size to some defined size.
Maybe it can help you as well.
References:
- [https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Get-image-dimensions(Carrierwave)][1]
- [http://www.sitepoint.com/get-loaded-with-the-file-api/(Jquery FileReader API)][2]
[1]: https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Get-image-dimensions
[2]: http://www.sitepoint.com/get-loaded-with-the-file-api/