Jump to content
herbieherb

ExportImageFile does nothing

Recommended Posts

I am trying to make a script that exports an image object to a specified file path. Everything works well but vs.ExportImageFile(hImage, path) does nothing.

 

Here is the script:

________________________________________________________

#Get selected bitmaps

crit_ = '(((SEL=TRUE) & (T=BITMAP)))'

out_list = []

def Add_Handle(obj):
    out_list.append(obj)

vs.ForEachObject(Add_Handle,crit_)

 

#GetFirstImage
hImage = out_list[0]

 

#Choose path
fileName = vs.PutFile('Choose path:', 'image.bmp')


#Exort Image to path
vs.ExportImageFile(hImage, fileName)
vs.Close(fileName)

________________________________________________________

And an example file:

export image.vwx

Share this post


Link to post

vs.PutFile() is used for text files, but you want to create an image file.

I suggest building your path using vs.GetFolder()

You also will not need to use vs.Close() after making this change.

 

fileName = vs.GetFolder('Choose path:')[1] + 'image.bmp'

(You need to extract the second output from GetFolder, which is why the [1] is after it.)

Share this post


Link to post

Thx a lot. This worked well.

Here is the file with the scripts that export images directly. I had to use two scripts for jpg and png as i couldn't find out the image type.

export image.vwx

Is there a way to find out if an image is a png or a jpg?

Share this post


Link to post
3 hours ago, herbieherb said:

Is there a way to find out if an image is a png or a jpg?

 

Yes. This one liner will show the compression used on a placed image:

 

vs.Message(vs.GetObjectVariableLongInt(vs.FSActLayer(), 532))   # 1 = JPEG, 2 = PNG

 

Raymond

  • Like 1

Share this post


Link to post
30 minutes ago, herbieherb said:

I have extended the script so that rendered viewports can now also be saved directly as images. The script now takes the name of the object as prefix of the file name.

 

Here is the current script:

export image v2018.vwx

export image v2019.vwx

 

I've just tried running this in one of my files... but get this error message

1883054349_ScreenShot2019-06-07at13_48_30.thumb.jpg.2a7be8a50c25b864afad891790fc9d30.jpg

 

That seems to happen whether I try it on a bitmap image, or on a viewport (have tried both Renderworks and OpenGL vports)

Share this post


Link to post

Found the issue. Selected objects from other layers interfere with the script somehow. I'll try to fix it.

  • Like 1

Share this post


Link to post

I've done a few quick tests and this appears to work really well! This seems to satisfy a simple function that people have requested repeatedly from VW for years, so thank you for taking the time to create this!

 

Question - is it possible for a script like this to be made to work on multiple viewports at once? For example, if I have a grid of 12 renderings and I want to save out the images from all 12 at once?

Share this post


Link to post

Yes, that should be possible, but it requires some work. I will take a look at it on occasion. Until then you could integrate the script as a menu command into your VW-UI. Then just shortcut it to use the script faster.

Edited by herbieherb

Share this post


Link to post

Amazing, thank you herbieherb! The ability to export multiple viewports, plus the naming improvements are all really fantastic.

 

By the way, before adding the script to my workspace as a command, I put a pound sign in front of lines 28 and 29, since I want to be able to export out-of-date viewports as well. I know very very little about coding, but this seemed to work 🙂

  • Like 2

Share this post


Link to post

I've just been using this too - thank you very much @herbieherb

 

Like @Andy Broomell I'd like to be able to export out-of-date viewports, so I have also disabled lines 28 and 29 (using a £ sign didn't work for me, but just deleting them did)

 

One comment, if you run the script, but then click 'cancel' instead of 'open' in the dialogue asking you for the file location, the image is not exported (as expected) however a message saying an image has been exported is returned nonetheless.

  • Like 1

Share this post


Link to post
1 hour ago, line-weight said:

(using a £ sign didn't work for me, but just deleting them did)

Use # instead of £

Share this post


Link to post
Posted (edited)

@herbieherb I am continuing to use this scriptand it's very useful. Thank you.

 

There's something strange I have noticed. I expect this is something in Vectorworks, not a problem with your script, but I wonder if it makes any sense to you.

 

I will export a render viewport, and I'll get a PNG image with a certain size, let's say 2000px wide and 1000px high.

 

I then do some kind of edit of the geometry that the viewport is looking at, and re-render it. And then I export it using the script again.

 

And this time I will get a viewport that is 2000px wide and 1019px high (or similar). It'll be a slightly different size, and from what I can make out, the crop is the same, the image is just squashed or stretched very slightly.

 

Surely this shouldn't happen - the viewport should produce the same pixel dimension image each time, no?

Edited by line-weight
  • Like 1

Share this post


Link to post
Posted (edited)

This is really weird. But I can reproduce it here. It's not the script. It already gets the different sized images from Vectorworks. So I can reproduce that too. The exact same viewport with the exact same content rendered and then converted into an image almost always results in a slightly different image size. Tested with ~4960x3510 pixels I have variations of ±1 pixel in Y-direction and even ±9 pixels in X-direction.

Edited by herbieherb

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


 

7150 Riverwood Drive, Columbia, Maryland 21046, USA   |   Contact Us:   410-290-5114

 

© 2018 Vectorworks, Inc. All Rights Reserved. Vectorworks, Inc. is part of the Nemetschek Group.

×
×
  • Create New...