LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2938|回复: 7

请问怎样使用Linux中的libgif.libpng.libjpeg库,在线等.

[复制链接]
发表于 2005-12-5 11:17:11 | 显示全部楼层 |阅读模式
我们公司有一项目,客户要求能够根据数据库中的数据动态显示图形,
在网上找了好久,只找到一篇:
"Internet常见图像格式及其在 Linux上的处理(一) "
文章中讲了gif.png.jpeg的图像格式,
还说在第二部分将会介绍使用libgif,libpng,libjpeg来编码的例子,
但是我没找到.

我想请问一下高手,libgif.libpng.libjpeg中有些什么函数?
如何使用它们来生成gif(png,jpeg)?最好能有个例子.
谢谢了!
发表于 2005-12-5 12:36:59 | 显示全部楼层
去看看ImageMagick的C API,libgif, libpng应该是更底层的东西,一般情况没必要专门为某种文件格式去学他的一套API吧。注意licence问题,比较反感有些公司使用GPL的库而不开源(可以选择LGPL或其他没有GPL严格的库)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-5 14:34:17 | 显示全部楼层
谢谢楼上的了,但是如果不用libgif.libpng.libjpeg库等,
让我手工生成gif.jpg.png图像文件我更加不会啊
回复 支持 反对

使用道具 举报

发表于 2005-12-5 14:55:59 | 显示全部楼层
用ImageMagick的MagickWand API来操作:

http://www.imagemagick.org/script/magick-wand.php
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-5 16:25:15 | 显示全部楼层
Post by lzlz
用ImageMagick的MagickWand API来操作:

http://www.imagemagick.org/script/magick-wand.php
谢谢lzlz大哥热心的回复,
我看了一下ImageMagick里面的源码,
还看了一下MagickCore C API和MagickWand C API,
小弟的英文实在太乱,加上图像格式又比较复杂,看了半天还是有许多不懂,
我想请问一下lzlz大哥有没有中文的文档?
或者说lzlz有没有MagickCore C API和MagickWand C API函数的中文说明?
谢谢了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-5 16:25:02 | 显示全部楼层
      
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-5 16:25:08 | 显示全部楼层
       
回复 支持 反对

使用道具 举报

发表于 2005-12-5 17:28:59 | 显示全部楼层
没有,慢慢看吧,偶的英文也很烂的说

这是偶的一个例子:

[PHP]static int v_init_flag;

void v_init(void)
{
        MagickWandGenesis();
        v_init_flag = 1;
}

void v_fini(void)
{
        MagickWandTerminus();
        v_init_flag = 0;
}

/**
* save frame pixbuf to file
* the file format is detected from by @fname's extension.
*/
void v_save_frame(
                                  const uint8_t* pixbuf,
                                  int src_width,
                                  int src_height,
                                  const char* fname,
                                  double rotate_degree,
                                  int dst_width,
                                  int dst_height)
{
        MagickWand* magick_wand;
        MagickBooleanType status;
        PixelWand* background;

        if(!v_init_flag)
                v_init();

        magick_wand = NewMagickWand();

        /**
         * set background
         */
        background = NewPixelWand();
        PixelSetColor(background, "#000000");

        /**
         * consititute an image from pixbuf
         * pixbuf shouble be arbitary "RGB" with 8bit each pixel format.
         */
        status = MagickConstituteImage(magick_wand, src_width, src_height, "RGB", CharPixel, pixbuf);
        assert(status);

        /**
         * Turn the images into a thumbnail sequence.
         */
        MagickResetIterator(magick_wand);
        while (MagickNextImage(magick_wand) != MagickFalse){
                if(rotate_degree > 0.5 ||
                                rotate_degree < -0.5)
                        MagickRotateImage(magick_wand, background, rotate_degree);
                MagickResizeImage(magick_wand,dst_width,dst_height,LanczosFilter,1.0);
                MagickSetImageCompressionQuality(magick_wand, 75);
        }

        status=MagickWriteImages(magick_wand,fname,MagickTrue);
        assert(status);

        DestroyPixelWand(background);
        DestroyMagickWand(magick_wand);
}[/PHP]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表