[code] extract png thumbnail image from .skp file
-
This bit of Ruby code extracts the png image from a .skp file and writes it to disk using the same basename as the model file.
-
yup, i did something similar in 2005, a viewer for .skp thumbnail inside Total Commander - see my blog post (no source though yet)
-
_
The following code does the same thing BUT must be run from within Sketchup Ruby.( Jim's code can run in standard Ruby, and does not need Sketchup running.)
folder = Dir.getwd # browse for another folder here (opt.) # see TIG's "import_from_folder" script Dir.foreach( folder ) do |fn| skp = File.join(folder,fn) img = '' # first 2 entries are dirs '.' and '..' if File.ftype( skp )=='file' if fn.downcase.include?('.skp') # it's a Sketchup model img = fn.split('.')[0]+'.png' img = File.join( folder, img ) Sketchup.save_thumbnail(skp,img) end # if it's a SKP end # if 'file' type end # Dir loop
EDIT-06JAN2010: added downcase to filename .skp test
FYI: There are three (3) save_thumbnail methods
Sketchup.save_thumbnail which can work on files, other than the one that's loaded.
Model.save_thumbnail which only works for the current model, but has a bug, in that if the model has never been saved, it writes a blank thumbnail image to the %UserProfile% folder instead of the Model folder specified in Preferences>Files>Model folderpath.
[BUG - as of SU ver 7.1.6087]ComponentDefinition.save_thumbnail
There is also View.write_image which can write a thumbnail of the current view that CAN be different than the thumbnail that was saved within the file.
_ -
Hi,
i would like to know how to extract with better resolution than a thumbail or how t oextract texture from skp filesthanks a lot ?
regards
Gabriel -
@nuagevert said:
Hi,
i would like to know how to extract with better resolution than a thumbail or how t oextract texture from skp filesthanks a lot ?
regards
GabrielSketchUp automatically generates a thumbnail image and saves it inside the skp file. That is what Jim's code extracts. You have no control over the size or quality of this image. In my experience, for a complex model it is almost useless. There just aren't enough pixels in it to avoid total blur of the contents.
To get an image in which you control the size and quality, you must use one of the techniques Dan describes. As he notes, these are Ruby code that runs within SketchUp - though I suppose you could write code using the C API that would do it.
Steve
-
@Gabriel... do you REALLY use pre-v6 SketchUp ? Did you download it off the web somewhere ?
Please go to SketchUp.com and download the latest free version. There are very many bugs in those old version, they should be outlawed!
-
thanks you a lot
i hadnt understand at the begininng it was extraction of thumbail
so i understand know why their were so little .so i will try download for more recent sketchup version and i will try to find the way to find a ruby code or try to done if is not so complicated
i will try to extract texture of scene and atribute the name of skp object , cause it was that s i exactly want to do
thanks again and have nice year !
Gabriel
-
hi all
anyone tried Jim's script using ruby 2 in SU...
I get encoding errors on my mac...
Error: invalid Unicode escape: /\xFF\xFE\xFF\x0ES\x00k\x00e\x00t\x00c\x00h\x00U\x00p\x00 \x00M\x00o\x00d\x00e\x00l\x00\xFF\xFE\xFF
If I can get it to run, I can pipe the output and attach it to the skp files resource fork ...
I think it would be faster then using
Sketchup.save_thumbnail(skp,img)
for the same purpose...I want to compare them...
john
-
Not sure - it still works fine for me.
-
hi Jim
to clarify, I'm trying to run it in 'Ruby Console' using the embedded ruby 2...
and it also fails using Jeff's Terminal.app cmd, but mac also uses ruby 2...
john
-
@driven said:
hi Jim
to clarify, I'm trying to run it in 'Ruby Console' using the embedded ruby 2...
and it also fails using Jeff's Terminal.app cmd, but mac also uses ruby 2...
john
John, try putting the magic comment at the head of jim's file:
coding:ascii-8bit
At least that worked for me from a Terminal window. And the png I got was much nicer than the ones I remember from SU 8 when I last tried this...
Steve
-
@steve
that stopped the errors, but still not working here...
send me your copy...
john -
-
cheers Steve that works if I cd into the folder then run...
it returns the exact same png as
Sketchup.save_thumbnail
[if that's set for png]...pixel dimensions vary wildly from skp to skp...
you can influence the size by re-saving the skp in v2015, but the logic is a little obscure...
one that was 400x183, I re-saved now comes in at 256x256 but that seems to be the limit...
it also cropped the image, so needs zoom extents in a square viewport to see all...
the upshot is I can use it for a quick'n'dirty batch mode icon generator, but they're not as good as doing them individually using my add icon plugin...
-
I know this post is like a thousand years old, but I was using the "extract_png.rb" from "Jim". It doesn't seem to work in SU2023. I need this to compile a catalogue of all of my components. Is there an updated version out there somewhere? I really need this. Thanks in advance!
-
Canโt you just export the file as a png?
-
The long existing method is
https://ruby.sketchup.com/Sketchup.html#save_thumbnail-class_method -
Ooops, I thought they wanted to create a set of png images of their components.
-
@jkoll66 said:
I know this post is like a thousand years old, but I was using the "extract_png.rb" from "Jim". It doesn't seem to work in SU2023. I need this to compile a catalogue of all of my components. Is there an updated version out there somewhere? I really need this. Thanks in advance!
If you are doing this from within SketchUp, try something like:
# SketchUp 2015 or later. def export_thumbnails(source_path = nil, dest_path = nil) # unless source_path && File.directory?(source_path) models = Sketchup.active_model.path if models.empty? models = File.join(ENV['HOME'], 'Documents') end # source_path = UI.select_directory( title; "Select Model Directory", directory; models ) return unless source_path end # unless dest_path && File.directory?(dest_path) images = Sketchup.active_model.path images = source_path if images.empty? # dest_path = UI.select_directory( title; "Select Image Output Directory", directory; images ) return unless dest_path end # Dir.glob( '*.skp', base; source_path ) do |skp| source_file = File.join(source_path, skp) image_file = skp.split('.')[0] << '.png' output_file = File.join( dest_path, image_file ) Sketchup.save_thumbnail(source_file, output_file) end # Dir loop # end ###
Advertisement