`
jackle_liu
  • 浏览: 147986 次
文章分类
社区版块
存档分类
最新评论

Flash 转 图片(swf to image)

阅读更多

  最近接到一个任务,需要将flash图表转化成图片,开始以为很简单。结果google了一下,发现网上关于java操作flash的文章极少,而且大部分是如何来制作flash文件,关于将flash文件转成图片,音频等等的几乎没有。

 

   http://www.flagstonesoftware.com这个网站提供的transform.jar似乎就是最权威的java flash api了,目前已经出来3.0beta1, 我用得是2.3.3。但是我发现他也没提供将flash文件成图片的API. 后来又goole了一圈,还是没有合适的,遂决定对transform.jar 的源代码进行深入研究。因为既然能将图片以一定的方式装进swf文件,那一定也可以以相反的方式转化回来,我只要看看它如何装进去的。

 

    引用这个API一般少不了FSMovie这个类, 发现这个类里有个decodeFromFile(String fileName) 的方法。看注释,这个方法是将swf文件解析成单个的对象,可以是声音,图片,帧,形状等等。因为我只需要图片,那我只需要对图片对象进行处理。经过一番实验,写了下面的代码,目前对jpg图片组成的swf是能够解析的。相信只要稍加处理,应该可以处理更多的类型。

 

 

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.zip.DataFormatException;

import javax.imageio.ImageIO;

import com.flagstone.transform.FSDefineJPEGImage2;
import com.flagstone.transform.FSMovie;
import com.flagstone.transform.FSMovieObject;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class SWFUtil {

    private static final long serialVersionUID = 1069978110917293106L;

    public void transformToIMG(String swfFilePath, String imgFilePath)
            throws IOException {
        FSMovie movie;
        try {
            movie = new FSMovie(swfFilePath);
        } catch (IOException e) {
            e.printStackTrace();
            return;
        } catch (DataFormatException e) {
            e.printStackTrace();
            return;
        }
        List<FSMovieObject> oList = movie.getObjects();

        for (FSMovieObject o : oList) {
            if (o.getType() == FSMovieObject.DefineImage
                    || o.getType() == FSMovieObject.DefineImage2
                    || o.getType() == FSMovieObject.DefineJPEGImage
                    || o.getType() == FSMovieObject.DefineJPEGImage2
                    || o.getType() == FSMovieObject.DefineJPEGImage3) {
                // System.out.println("catch image.... "+o.getType());

                // TODO add more logic to process different image type.
                // Currently there is only FSDefineJPEGImage2
                BufferedImage bio = ImageIO.read(new ByteArrayInputStream(
                        ((FSDefineJPEGImage2) o).getImage()));
                FileOutputStream fos = new FileOutputStream(imgFilePath);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
                encoder.encode(bio);

                break;
            }
        }
    }

}

 对应的测试类如下(先用jpg图片生成swf,再对这个swf进行解析):

public class SWFUtilTest {

    public static final String SWF_FILE = "test/img.swf";

    public static final String IMAGE_TARGET_FILE = "test/img.jpg";

    public static final String IMAGE_SOURCE_FILE = "test/source.jpg";

    private static SWFUtil tool = null;

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        tool = new SWFUtil();
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        tool = null;
    }

    @Test
    public final void testTransformToIMG() {

        try {
            createMovie(IMAGE_SOURCE_FILE, SWF_FILE);
            tool.transformToIMG(SWF_FILE, IMAGE_TARGET_FILE);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (DataFormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private void createMovie(String sourceIMG, String targetSWF)
            throws DataFormatException, IOException {
        FSMovie movie = new FSMovie();
        FSImageConstructor imageGenerator = new FSImageConstructor(sourceIMG);

        int imageId = movie.newIdentifier();
        int shapeId = movie.newIdentifier();

        int xOrigin = imageGenerator.getWidth() / 2;
        int yOrigin = imageGenerator.getHeight() / 2;

        FSDefineObject image = imageGenerator.defineImage(imageId);

        FSDefineShape3 shape = imageGenerator.defineEnclosingShape(shapeId,
                imageId, -xOrigin, -yOrigin, new FSSolidLine(20, FSColorTable
                        .black()));

        movie.setFrameRate(1.0f);
        movie.setFrameSize(shape.getBounds());
        movie.add(new FSSetBackgroundColor(FSColorTable.lightblue()));
        movie.add(image);
        movie.add(shape);
        movie.add(new FSPlaceObject2(shapeId, 1, 0, 0));
        movie.add(new FSShowFrame());
        movie.encodeToFile(targetSWF);
    }
}
 

 

0
0
分享到:
评论
1 楼 诱人的坚持 2014-08-08  
你好 ,FSMovie这个对象是你自己的 还是transform.jar包中的  为什么我下载一个包下来没有这个对象 能否给我解释一下这 我很需要 谢谢

相关推荐

    flash转图片dll(swf转jpg)

    标题中的“Flash转图片DLL(SWF转JPG)”是指一种技术,它允许将Adobe Flash格式的SWF文件转换为常见的图像格式,如JPG。这个过程通常涉及使用特定的DLL(动态链接库)文件,它是一个包含可重用代码的库,可以被其他...

    各种文件转换为SWF显示

    - **图片转SWF**:静态图片(如JPEG、PNG、GIF等)可以转换为SWF格式,创建成动态的幻灯片展示。这可以通过软件如Image to SWF Converter进行,可以添加过渡效果和背景音乐,增加观赏性。 3. **文本转SWF** - **...

    Swf2video pro破解版(含注册机)

    From FLASHANTS: SWF2Video converts Macromedia Flash to video including all movie clips, action scripts, and human interactions in Flash movies. It is used to create high-quality flash-based VCD/DVD, ...

    c# swf转图片,支持批量自定义修改

    首先,要实现SWF转图片,我们需要了解SWF文件的结构。SWF文件包含了帧、图形、动作脚本等元素,这些都需要解析以提取每一帧的图像内容。C#中并没有内置的库来直接处理SWF,因此我们需要依赖第三方库,如FreeSWF库,...

    C#源代码- 批量图片转FLASH

    批量图片转FLASH的主要技术点包括: 1. 图片读取:首先,你需要使用C#中的System.Drawing命名空间,其中包含Bitmap类来读取JPG格式的图片。通过File类打开文件,然后用Image.FromFile方法创建Bitmap对象。 2. 图片...

    swf视频转换器(支持很多格式)

    Convert flash(swf) to JPG, BMP image sequences, TAG, TIFF, PNG image sequences with alpha transparent channel. Key Features: . It could provide the best capability to convert flash(swf) files to ...

    flash .swf

    Also make sure to copy-paste the .swf, .js and .xml file to your website. Plus your images of course... Licensing The Image Rotator is licensed under a Creative Commons License. It allows you to use...

    Magic Swf2Avi 2008

    Add-ons, Magic Swf2Avi 2008 can convert Flash(swf) to JPG, BMP image sequences, TAG, TIFF, PNG image sequences with alpha transparent channel. Update: 2008-08-27 Magic Swf2Avi 2008 build 5.2.7.281 1....

    SWFToImage

    综上所述,SWFToImage是一款针对性强、便捷的SWF转BMP工具,尤其适用于需要快速提取SWF帧数据的用户。不过,其试用版的限制使得完整功能的解锁成为必要,尤其是对于专业用户而言,购买完整版可以解锁全部功能,提升...

    swf转换为gif(swf转换为gif)

    - **桌面软件**:如 SWF To Image,这是一款专用于SWF转换的软件,可以轻松将SWF转换为多种图像格式,包括GIF。 - **编程方式**:对于开发者,可以使用开源库如 Python 的 SWFReader 和 PIL(Python Imaging ...

    ailt-all-document-to-swf-converter

    这是一个把其他文件格式转换成FLASH动画文件的工具,包括把word、ppt、pdf、image等等多种不同形式,而且画面的大小、画面质量及播放速度都可以实现设置。重要的是这个软件有册机,非常适于个人实用。

    flex调用swf——swf可以转成具体的对象,而非MovieClip

    loader.load(new URLRequest("path_to_your_swf.swf"), context); ``` 3. **处理加载完成事件**:当SWF加载完成后,我们可以在事件监听器中访问加载的类并实例化。例如: ```actionscript function onSWFLoaded...

    FLASH AS3.0 控制加载的图片旋转缩放

    在Flash AS3.0中,控制加载的图片进行旋转和缩放是一项常见的需求,尤其在创建交互式应用程序或轻量级图片浏览器时。这个场景下,我们通常会使用ActionScript 3.0来处理图像资源,使其具备动态旋转和缩放的功能。...

    wpf 加载gif动画也可加载flash

    string xaml = converter.ConvertSwfToXaml("path_to_your_flash_file.swf"); ``` 3. 将转换后的XAML添加到WPF资源字典: ```xml &lt;ObjectDataProvider x:Key="flashResource" ObjectType="{x:Type xaml2swf:...

    最简洁实用的图片插入网页代码

    &lt;img class="image-style" src="path/to/your/image.jpg" alt="示例图片" width="200" height="150"&gt; ``` - `.image-style`:定义了图片的一些CSS样式,包括边框、圆角和阴影。 ### 四、总结 通过上述方法,我们...

    as3恶搞图片

    在提供的压缩包文件中,`index.swf`应该是最终的SWF文件,它是编译后的AS3项目,可以在Flash Player中运行。`flash`和`fla`文件则与开发过程相关。`flash`可能是一个包含源代码和资源的文件夹,而`.fla`是Adobe ...

    常用软件格式地相互转换灵活技术集锦.docx

    本篇文章主要介绍了三种常用的文件格式转换方法,包括PPT(PowerPoint)转SWF(Flash)、MP3转EXE以及PDF转DOC。 1. **PPT转SWF**: 使用工具:PowerPoint to Flash 应用场景:此转换适用于那些需要在无需...

    jquery+falsh实现图片切换

    你需要使用Flash Professional或类似工具创建一个SWF文件,包含动态的图片过渡效果。然后,使用jQuery将这个Flash对象插入到网页中: ```html &lt;div id="flashContainer"&gt;&lt;/div&gt; ``` ```javascript var flashvars =...

    flash相册系统

    Most of our users want to use our component from a different folder than the location of the HTML page. To see how to embed a component that's in a different folder than your page please read ...

    小FLASH源码

    3. **Welcome to Curling Club.swf** - 这是编译后的Flash影片文件,扩展名为.SWF(ShockWave Flash)。当发布Flash项目时,.swf文件会生成,它可以在Web浏览器中通过Flash Player插件播放,为用户提供动态的、交互...

Global site tag (gtag.js) - Google Analytics