• Login
sketchucation logo sketchucation
  • Login
🤑 SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

[code] extract png thumbnail image from .skp file

Scheduled Pinned Locked Moved Developers' Forum
19 Posts 9 Posters 5.0k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    Jim
    last edited by 4 Jan 2010, 04:01

    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.


    extract_png.rb

    Hi

    1 Reply Last reply Reply Quote 0
    • T Offline
      tbd
      last edited by 4 Jan 2010, 09:03

      yup, i did something similar in 2005, a viewer for .skp thumbnail inside Total Commander - see my blog post (no source though yet)

      SketchUp Ruby Consultant | Podium 1.x developer
      http://plugins.ro

      1 Reply Last reply Reply Quote 0
      • D Offline
        Dan Rathbun
        last edited by 4 Jan 2010, 10:48

        _
        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.
        _

        I'm not here much anymore.

        1 Reply Last reply Reply Quote 0
        • N Offline
          nuagevert
          last edited by 24 Dec 2013, 07:52

          Hi,
          i would like to know how to extract with better resolution than a thumbail or how t oextract texture from skp files

          thanks a lot ?

          regards
          Gabriel

          1 Reply Last reply Reply Quote 0
          • S Offline
            slbaumgartner
            last edited by 24 Dec 2013, 14:06

            @nuagevert said:

            Hi,
            i would like to know how to extract with better resolution than a thumbail or how t oextract texture from skp files

            thanks a lot ?

            regards
            Gabriel

            SketchUp 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

            1 Reply Last reply Reply Quote 0
            • D Offline
              Dan Rathbun
              last edited by 24 Dec 2013, 17:46

              @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! 😄

              I'm not here much anymore.

              1 Reply Last reply Reply Quote 0
              • N Offline
                nuagevert
                last edited by 1 Jan 2014, 11:05

                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

                1 Reply Last reply Reply Quote 0
                • D Offline
                  driven
                  last edited by 28 Dec 2014, 21:58

                  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

                  learn from the mistakes of others, you may not live long enough to make them all yourself...

                  1 Reply Last reply Reply Quote 0
                  • J Offline
                    Jim
                    last edited by 29 Dec 2014, 21:12

                    Not sure - it still works fine for me.

                    Hi

                    1 Reply Last reply Reply Quote 0
                    • D Offline
                      driven
                      last edited by 29 Dec 2014, 21:37

                      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

                      learn from the mistakes of others, you may not live long enough to make them all yourself...

                      1 Reply Last reply Reply Quote 0
                      • S Offline
                        slbaumgartner
                        last edited by 29 Dec 2014, 21:59

                        @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

                        1 Reply Last reply Reply Quote 0
                        • D Offline
                          driven
                          last edited by 29 Dec 2014, 22:18

                          @steve
                          that stopped the errors, but still not working here...
                          send me your copy...
                          john

                          learn from the mistakes of others, you may not live long enough to make them all yourself...

                          1 Reply Last reply Reply Quote 0
                          • S Offline
                            slbaumgartner
                            last edited by 29 Dec 2014, 22:36

                            @driven said:

                            @steve
                            that stopped the errors, but still not working here...
                            send me your copy...
                            john

                            sent via PM

                            1 Reply Last reply Reply Quote 0
                            • D Offline
                              driven
                              last edited by 30 Dec 2014, 00:00

                              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...1 = resized + batch icon; 2 = as extracted + batch icon; 3 = using add_icon.rb

                              learn from the mistakes of others, you may not live long enough to make them all yourself...

                              1 Reply Last reply Reply Quote 0
                              • J Offline
                                jkoll66
                                last edited by 12 Oct 2023, 17:00

                                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!


                                Extract.png

                                1 Reply Last reply Reply Quote 0
                                • ntxdaveN Offline
                                  ntxdave
                                  last edited by 12 Oct 2023, 20:14

                                  Can’t you just export the file as a png?

                                  1 Reply Last reply Reply Quote 0
                                  • TIGT Offline
                                    TIG Moderator
                                    last edited by 12 Oct 2023, 21:12

                                    The long existing method is
                                    https://ruby.sketchup.com/Sketchup.html#save_thumbnail-class_method

                                    TIG

                                    1 Reply Last reply Reply Quote 0
                                    • ntxdaveN Offline
                                      ntxdave
                                      last edited by 12 Oct 2023, 21:59

                                      Ooops, I thought they wanted to create a set of png images of their components.

                                      1 Reply Last reply Reply Quote 0
                                      • D Offline
                                        Dan Rathbun
                                        last edited by 25 Feb 2024, 00:29

                                        @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 ###
                                        
                                        

                                        I'm not here much anymore.

                                        1 Reply Last reply Reply Quote 0
                                        • 1 / 1
                                        • First post
                                          Last post
                                        Buy SketchPlus
                                        Buy SUbD
                                        Buy WrapR
                                        Buy eBook
                                        Buy Modelur
                                        Buy Vertex Tools
                                        Buy SketchCuisine
                                        Buy FormFonts

                                        Advertisement