Re: How to specify the data-range with Import
- To: mathgroup at smc.vnet.net
- Subject: [mg122940] Re: How to specify the data-range with Import
- From: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>
- Date: Thu, 17 Nov 2011 06:05:24 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201111110953.EAA08442@smc.vnet.net>
Hi, Jesus Hernandez and (maybe others) from the Wolfram support uncovered the reason for this behavoir. The important detail here seems to be whether or not the created list is a PackedArray. Since Range[5] gives a packed array but Table[i,{i,5}] not, the following (from the example below) Import["lena_multi.tif", {"Data", Range[5]}] // Dimensions does not work, while this here Import["lena_multi.tif", {"Data", Table[i,{i,5}]}] // Dimensions works as expected. Therefore, one has to use FromPackedArray from the Developer package to use any arbitrarily created list of integers. For instance Needs["Developer`"] Import["lena_multi.tif", {"Data", FromPackedArray@Range[3]}] // Dimensions Cheers Patrick On Fri, 2011-11-11 at 04:53 -0500, Patrick Scheibe wrote: > Hi, > > following (old) example of a multi-image > > img = ColorConvert[ExampleData[{"TestImage", "Lena"}], "Grayscale"]; > Export["lena_multi.tif", Table[img, {10}], "TIFF"]; > > With Import one can now specify that only the "Data" of the first 3 > images are required: > > In[45]:= Import["lena_multi.tif", {"Data", {1, 2, 3}}] // Dimensions > > Out[45]= {3, 512, 512} > > works like a charm. But trying to import 50 of say 1000 images is > slightly cumbersome this way. And now the fun starts: > > Import["lena_multi.tif", {"Data", Range[3]}] // Dimensions > > gives > > Import::noelem: The Import element "FrameNum" is not present when > importing as TIFF. >> > > maybe Import has some Hold attribute (which it *doesn't*) > > Import["lena_multi.tif", Evaluate[{"Data", Range[3]}]] // Dimensions > > doesn't work > > With[{range = Range[3]}, > Import["lena_multi.tif", {"Data", range}] // Dimensions > ] > > doesn't work. And so on and so on.. Luckily, we this very intuitive > construct > > In[50]:= Release[ > Hold[Import["tmp/lena_multi.tif", {"Data", range}]] /. > range -> Range[3]] // Dimensions > > Out[50]= {3, 512, 512} > > > Please, could someone enlighten me? > > Cheers > Patrick > > PS: My system here is Linux-x86-64 with Ubuntu 10.04 and Mathematica 8.0.4 > > > >
- References:
- How to specify the data-range with Import
- From: Patrick Scheibe <pscheibe@trm.uni-leipzig.de>
- How to specify the data-range with Import