• 0

[JAVA] Getting TIFF image dimension without loading image


Question

Hi Guys,

Hope someone can help me here.

I need to find the dimension of a REALLY BIG TIFF Image (It is a GEOTIFF MAP). I've tried using JAI or ImageIO but it resulted in mem overflow and some ARRAY SIZE LIMIT exception. But I don't really want to LOAD the entire TIFF. I just only want the dimension (Height and Width) of it.

I did my own research and the only piece of code i found that works is the following:

  Quote
ImageInputStream imageStream = ImageIO.createImageInputStream(inputTIF);

java.util.Iterator<ImageReadereaders = ImageIO.getImageReaders(imageStream);

ImageReader reader = null;

if(readers.hasNext()) {

reader = readers.next();

}else {

imageStream.close();

//can't read image format... what do you want to do about it,

//throw an exception, return ?

}

reader.setInput(imageStream,true,true);

int imageWidth = reader.getWidth(0);

int imageHeight = reader.getHeight(0);

reader.dispose();

imageStream.close();

Ok, here comes my problem. ImageReader is only available in Java 1.5 and above. UNFORTUNATELY... i am limited (means i cannot change this) to only using java 1.4.2_05. So i don't have ImageReader. So my question is if there is any other way i can read the image dimension?

Regards

Don Chen

3 answers to this question

Recommended Posts

  • 0

The Python Imaging Library does exactly what you want, that is, opening an image file doesn't load it in memory, and you can retrieve its width and height without loading it. It's also completely trivial:

import Image
myImage = Image.open("M:\yImage\P.athmensions = myImage.size
print "width =" +  dimensions[0]
print "height =" + dimensions[1]

I don't know if that's an option for you given that you're currently working in Java; maybe you can compile it to an executable and have Java call that and pipe the output toward itself, or use some temporary file.

  • 0

Because I am totally awesome, I wrote the python script and compiled it to an exe so you can invoke it from your java code (using Runtime.exec). It outputs width and height into a text file bearing the same name as the image file + the word "_Dimensions" (and it ends with ".txt" of course). So invoke the process, open the output file for reading, and read the data.

It's not fast, but it's way faster than loading the image in memory.

Here's the script in case you're interested. The exe is attached to this post. Unzip the whole thing because the dll and other files are needed for the exe to run.

import Image
import sys
import os

def main():
	if not areValid(sys.argv):
		printHelp()
		return
	try:
		filename = sys.argv[1]
		image = Image.open(filename)
		dimensions = image.size
	except Exception, e:
		print "Error trying to read " + filename + ":"
		print e

	try:
		parts = filename.split('\\')
		newName = parts[len(parts) - 1]
		parts = newName.split('/')
		newName = parts[len(parts) - 1]
		parts = newName.split('.')
		txtFileName = parts[0] + "_Dimensions.txt"
		txtFile = open(txtFileName, 'w')
		strDimensions = [str(i) + '\n' for i in dimensions]
		txtFile.writelines(strDimensions)
		txtFile.close()
	except Exception, e:
		print "Error trying to save dimensions:"
		print e


def areValid(argv):
	if not len(argv) &gt;= 2:
		return False
	if not os.path.isfile(argv[1]):
		return False
	return True

def printHelp():
	print "usage : getImageSize.exe C:\Path\To\MyImage.tif"
	print "the results will be output to MyImage_Dimensions.txt"
	print "this  text file will contain two numbers in ASCII:, first the width, then the height of the image."


if __name__ == "__main__":
	main()

dist.zipFetching info...

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Men are real idiots justifying using any nuclear arms.  
    • OBS Studio 31.1.0 RC1 by Razvan Serea OBS Studio is software designed for capturing, compositing, encoding, recording, and streaming video content, efficiently. It is the re-write of the widely used Open Broadcaster Software, to allow even more features and multi-platform support. OBS Studio supports multiple sources, including media files, games, web pages, application windows, webcams, your desktop, microphone and more. OBS Studio Features: High performance real time video/audio capturing and mixing, with unlimited scenes you can switch between seamlessly via custom transitions. Live streaming to Twitch, YouTube, Periscope, Mixer, GoodGame, DailyMotion, Hitbox, VK and any other RTMP server Filters for video sources such as image masking, color correction, chroma/color keying, and more. x264, H.264 and AAC for your live streams and video recordings Intel Quick Sync Video (QSV) and NVIDIA NVENC support Intuitive audio mixer with per-source filters such as noise gate, noise suppression, and gain. Take full control with VST plugin support. GPU-based game capture for high performance game streaming Unlimited number of scenes and sources Number of different and customizable transitions for when you switch between scenes Hotkeys for almost any action such as start or stop your stream or recording, push-to-talk, fast mute of any audio source, show or hide any video source, switch between scenes,and much more Live preview of any changes on your scenes and sources using Studio Mode before pushing them to your stream where your viewers will see those changes DirectShow capture device support (webcams, capture cards, etc) Powerful and easy to use configuration options. Add new Sources, duplicate existing ones, and adjust their properties effortlessly. Streamlined Settings panel for quickly configuring your broadcasts and recordings. Switch between different profiles with ease. Light and dark themes available to fit your environment. …and many other features. For free. At all. OBS Studio 31.1.0 RC1 changelog: Fixed an issue where a Browser Source or Browser Dock would crash OBS Studio on macOS 13 or older [jcm93/PatTheMav/RytoEX] Fixed an issue where browser error pages could not scroll [WizardCM] Fixed an issue on macOS where menu items would launch unintended actions when OBS was set to certain languages [gxalpha] Fixed an issue in Beta 1-2 where the group icon in the Sources list was not positioned correctly in the System theme [shiina424] Fixed an issue in Beta 2 where the preview zoom button tooltip translations were incorrect [shiina424] Download: OBS Studio 31.1.0 RC1 | Portable | ARM64 | ~200.0 MB (Open Source) View: OBS Studio Homepage | Other Operating Systems | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Nice little improvement One improvement I would like to see. Being able to use a voice commands in Firefox "Firefox, 2FA (enter a 2FA code)". "Firefox, Close all tabs right" "Firefox, Pin tab" "Firefox, Bookmarks (name of Bookmark to open a Bookmark)" "Firefox, Settings, X" among others.
    • Microsoft Defender XDR gets TITAN-powered Security Copilot recommendations by Paul Hill Guided Response, a Copilot-powered capability in Microsoft Defender XDR that guides analysts through step-by-step investigation and response flows, is getting a big upgrade with the introduction of TITAN recommendations. With TITAN, Microsoft wants to give security analysts real-time, threat-intel-driven recommendations so they can better prepare against attacks, before they even happen. TITAN is an adaptive threat intelligence graph that uses data from first and third-party telemetry and employs guilt-by-association techniques to warn analysts about unknown IP addresses that could pose a threat, due to their association with known malicious addresses. The primary benefit of TITAN is that security analysts get faster warnings about potential threats before they even have a chance to cause a problem. TITAN is an enhancement of Security Copilot Guided Response, rather than a replacement to it. With this extra tool, security analysts will be able to better keep up with evolving threats. Understanding TITAN's AI-powered threat intelligence The Redmond giant said that TITAN “represents a new wave of innovation” built upon its threat intelligence capabilities that introduces a real-time, adaptive threat intelligence graph. It takes telemetry from first and third-party sources such as Microsoft Defender for Threat Intelligence, Microsoft Defender for Experts, and customer feedback. The graph uses guilt-by-association techniques to mark unknown devices as threats, if they’re associated with known malicious entities. This gives security analysts a window of opportunity to take action and prevent harm. To identify potential threats, Microsoft uses a semi-supervised label propagation technique that assigns reputation scores to nodes based on the score of their neighbors. These reputation scores allow Microsoft’s unified security operation platform to implement containment and remediation actions via attack disruption. Practical impact and future outlook The new TITAN suggestion now appears within Guided Response as triage and containment recommendations. When a suspicious IP is detected, a Guided Response recommendation is automatically generated. These can help security analysts deal with various threats including IP addresses, IP ranges, and email senders. Microsoft said in early testing its TITAN recommendations have shown good results. TITAN boosted Guided Response triage accuracy by 8%, it reduced the time needed to investigate and respond to incidents, and its explainable recommendations gave analysts more confidence in the actions they take. As threats become more sophisticated, Microsoft’s TITAN will help to tackle threats before they even become an issue.
    • China wants the tech... if they were to invade, TSMC would destroy it's fabs and other critical information first. Plus, you can bet they have backups stored NOT in Taiwan.
  • Recent Achievements

    • Enthusiast
      Motoman26 went up a rank
      Enthusiast
    • Mentor
      M. Murcek went up a rank
      Mentor
    • Explorer
      treker_ed went up a rank
      Explorer
    • Apprentice
      CHUNWEI went up a rank
      Apprentice
    • Veteran
      1337ish went up a rank
      Veteran
  • Popular Contributors

    1. 1
      +primortal
      677
    2. 2
      ATLien_0
      267
    3. 3
      Michael Scrip
      177
    4. 4
      +FloatingFatMan
      176
    5. 5
      Steven P.
      139
  • Tell a friend

    Love Neowin? Tell a friend!