精华内容
下载资源
问答
  • 图片压缩

    2013-03-23 03:03:42
    在Iphone上有两种读取图片数据的... UIImageJPEGRepresentation函数需要两个参数:图片的引用和压缩系数.而UIImagePNGRepresentation只需要图片引用作为参数.通过在实际使用过程中,比较发现: UIImagePNGRepresentation
    在Iphone上有两种读取图片数据的简单方法: UIImageJPEGRepresentation和UIImagePNGRepresentation. UIImageJPEGRepresentation函数需要两个参数:图片的引用和压缩系数.而UIImagePNGRepresentation只需要图片引用作为参数.通过在实际使用过程中,比较发现: UIImagePNGRepresentation(UIImage* image) 要比UIImageJPEGRepresentation(UIImage* image,
     1.0) 返回的图片数据量大很多.譬如,同样是读取摄像头拍摄的同样景色的照片, UIImagePNGRepresentation()返回的数据量大小为199K ,而 UIImageJPEGRepresentation(UIImage* image, 1.0)返回的数据量大小只为140KB,比前者少了50多KB.如果对图片的清晰度要求不高,还可以通过设置 UIImageJPEGRepresentation函数的第二个参数,大幅度降低图片数据量.譬如,刚才拍摄的图片, 通过调用UIImageJPEGRepresentation(UIImage*
     image, 1.0)读取数据时,返回的数据大小为140KB,但更改压缩系数后,通过调用UIImageJPEGRepresentation(UIImage* image, 0.5)读取数据时,返回的数据大小只有11KB多,大大压缩了图片的数据量 ,而且从视角角度看,图片的质量并没有明显的降低.因此,在读取图片数据内容时,建议优先使用UIImageJPEGRepresentation,并可根据自己的实际使用场景,设置压缩系数,进一步降低图片数据量大小.
    展开全文
  • 降低PNG图片存储大小方法,图片压缩方法,如何降低PNG图片存储大小?前提是分辨率和尺寸大小不变,图形的透明部分不变。请看如下办法,亲测可用。1. 将PNG图片用PS打开。2. 图像-模式-8位/通道 (这样在后续存储时才...

    降低PNG图片存储大小方法,图片压缩方法,如何降低PNG图片存储大小?前提是分辨率和尺寸大小不变,图形的透明部分不变。请看如下办法,亲测可用。

    ###1. 将PNG图片用PS打开。
    ###2. 图像-模式-8位/通道 (这样在后续存储时才有gif存储选项)
    这里写图片描述
    ###3. 将图片另存为GIF。
    这里写图片描述
    ###4. 选项中选择局部可感知或者全部可感知。
    这里写图片描述
    ###5. 强制选择“无”,勾选透明度。
    这里写图片描述
    ###6. 存储后的gif文件和原png文件对比,从20.6k变为了1.8k。
    这里写图片描述
    ###7. 最后,把文件后缀的gif命名为png。
    这里写图片描述
    ###这样,既保证了分辨率、大小,又保证透明部分依旧透明!

    关注公众号 【从入门到精通】 获取最新技术资料

    展开全文
  • java高清无损图片压缩

    万次阅读 2019-03-29 22:46:57
    Java高清无损图片压缩 (本文禁止转载,如需转载请联系本人:微信/QQ同号:969987665)简单介绍thumbnailator-0.4.5.jar 官方下载网址语法使用(超级简单的,再也没有比这个再简单的东西)一、保持和原图像一样的宽高...

    简单介绍

    一开始用了数据流缩放图片,用完以后,心里好几百只草泥马一直在奔腾。。。完全就是辣鸡压缩。找了好久才发现了新大陆。
    Thumbnailator 是一个用来生成图像缩略图的 Java类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。有了这玩意,就不用在费心思使用Image I/O API,Java 2D API等等来生成缩略图了。

    thumbnailator-0.4.5.jar 官方下载网址

    http://www.java2s.com/Code/Jar/t/Downloadthumbnailator042alljar.htm
    

    语法使用(超级简单的,再也没有比这个再简单的东西)

    一、保持和原图像一样的宽高比

    如果需要的话,在生成缩略图的时候可以保持和源图像一样的的宽高比
    //第一种
    Thumbnails.of(new File("original.jpg"))
    .size(160, 160)
    .toFile(new File("thumbnail.jpg"));
    
    //第二种写法 最简洁写法   与第一种不同的是直接传 图片路径
    Thumbnails.of("original.jpg")
    .size(160, 160)
    .toFile("thumbnail.jpg");
    

    二、生成一个带有旋转和水印的缩略图

    Thumbnails.of(new File("original.jpg"))
    .size(160, 160)
    .rotate(90)  //可选   删除后图片不旋转
    .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("watermark.png")), 0.5f)
    .outputQuality(0.8f)
    .toFile(new File("image-with-watermark.jpg"));
    这段代码是从original.jpg这张图片生成最大尺寸160*160(可选项:顺时针旋转90°)水印放在右下角,50%的透明度,80%的质量压缩的缩略图。
    把生成的图片输出到输出流(OutPutStream)中
    

    三、可以根据现有的图片生成高质量的缩略图

    支持生成经过旋转后的缩略图

    for (int i : new int[] {0, 90, 180, 270, 45}) {
    Thumbnails.of(new File("coobird.png"))
    .size(100, 100)
    .rotate(i)
    .toFile(new File("image-rotated-" + i + ".png"));
    }
    
    参考:https://www.jianshu.com/p/fe6dba734f17
    展开全文
  • Android 高效图片压缩

    万次阅读 2020-09-21 18:27:04
    使用libjpeg-turbo进行图片压缩 1. JEPG 是什么? 相信有一部分使用 iPhone 手机用微信发送图片的时候,明明图片大小只有 1M ,但清晰度比 Android 手机 5 M 图片大小的还要清晰,那么这是为什么呢 ?。 当时...

    使用libjpeg-turbo进行图片压缩

    1. JEPG 是什么?

            相信有一部分使用 iPhone 手机用微信发送图片的时候,明明图片大小只有 1M ,但清晰度比 Android 手机 5 M 图片大小的还要清晰,那么这是为什么呢 ?。

            当时谷歌开发 Android 的时候,考虑了大部分手机的配置并没有那么高,所以对图片处理使用的是 Skia。当然这个库的底层还是用的 jpeg 图片压缩处理。但是为了能够适配低端的手机(这里的低端是指以前的硬件配置不高的手机,CPU 和内存在手机上都非常吃紧,性能差),由于哈夫曼算法比较吃 CPU 并且编解码慢,被迫用了其他的算法。所以 Skia 在进行图片处理在低版本中并没有开启哈弗曼算法。

            那么,JEPG 到底是什么?JEPG (全称是 Joint Photographic Experts Group) 是一种常见的一种图像格式,为什么我在这里会提到 JEPG 呢?是因为开源了一个 C/C++ 库底层是基于哈夫曼算法对图片的压缩 (libjpeg),下面我们就来着重了解下 libjpeg 这个库

    2. libjpeg 简介

            libjpeg-turbo 是一个 JPEG 图像编解码器,它使用 SIMD 指令(MMX,SSE2,AVX2,NEON,AltiVec)来加速 x86,x86-64,ARM 和 PowerPC 系统上的基线 JPEG 压缩和解压缩,以及渐进式JPEG 压缩 x86 和 x86-64 系统。在这样的系统上,libjpeg-turbo 的速度通常是 libjpeg 的 2 - 6 倍,其他条件相同。在其他类型的系统上,凭借其高度优化的霍夫曼编码例程,libjpeg-turbo 仍然可以大大超过 libjpeg。在许多情况下,libjpeg-turbo 的性能可与专有的高速 JPEG 编解码器相媲美。 libjpeg-turbo 实现了传统的 libjpeg API 以及功能较弱但更直接的 TurboJPEG API 。 libjpeg-turbo 还具有色彩空间扩展,允许它从/解压缩到32位和大端像素缓冲区(RGBX,XBGR等),以及功能齐全的 Java 接口。 libjpeg-turbo 最初基于 libjpeg / SIMD,这是由 Miyasaka Masaru 开发的 libjpeg v6b 的 MMX 加速衍生物。 TigerVNC 和 VirtualGL 项目在 2009 年对编解码器进行了大量增强,并且在2010年初,libjpeg-turbo 分拆成一个独立项目,目标是为更广泛的用户提供高速 JPEG压缩/解压缩技术。开发人员。

    3.编译libjpeg-turbo

    3.1 编译环境

          Linux/Ubuntu/Centis都行。在windows环境下可以安装虚拟机或者购买一个云主机,作者在阿里云购买的一个Ubuntu主机。

    3.2 准备工作

    libjpeg: libjepg 2.0.5

    cmakecmake-3.18.2-Linux-x86_64.tar.gz

          在~/.bashrc中添加cmake的环境变量,代码如下:

    export PATH=/home/study/cmake-3.18.2/bin:$PATH
    

          然后运行 source ~/.bashrc

    ndk: android-ndk-r21c

    [编译参考])(https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md)

    3.3 编写编译脚本

           进入到libjpeg-turbo目录。生成shell脚本,代码如下:

    #!/bin/bash
    
    # 源码目录
    MY_SOURCE_DIR=/home/study/libjpeg-turbo-2.0.5
    
    NDK_PATH=/home/study/android-ndk-r21b
    TOOLCHAIN=clang
    ANDROID_VERSION=21
    
    
    build_bin() {
        echo "-------------------star build $1-------------------------"
        ANDROID_ARCH_ABI=$1    # armeabi-v7a 
    	
        # 最终编译的安装目录
        PREFIX=${MY_SOURCE_DIR}/android/${ANDROID_ARCH_ABI}/
        HOST=$2
        
        cmake -G"Unix Makefiles" \
    	  -DANDROID_ABI=$ANDROID_ARCH_ABI \
    	  -DANDROID_ARM_MODE=arm \
    	  -DANDROID_PLATFORM=android-${ANDROID_VERSION} \
    	  -DANDROID_TOOLCHAIN=${TOOLCHAIN} \
    	  -DCMAKE_ASM_FLAGS="--target=${HOST}${ANDROID_VERSION}" \
          -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
          -DCMAKE_INSTALL_PREFIX=${PREFIX} 
    
        make clean
        make
        make install
    
    
        echo "-------------------$1 build end-------------------------"
    }
    
    
    
    #build armeabi-v7a
    build_bin armeabi-v7a arm-linux-androideabi

           修改权限 sudo chmod +x build.sh,然后再执行./build.sh,编译完成之后会生成如下目录:

     

    4. 在android使用libjpeg-turbo 

           1. 在 Android Studio 中创建一个项目,然后添加编译好的libjpeg-turbo文件,项目目录结构如下:

           2. 然后配置CMakeLists.txt,代码如下: 

    cmake_minimum_required(VERSION 3.4.1)
    
    # 引入头文件
    include_directories(${CMAKE_SOURCE_DIR}/include)
    # 设置静态库路径
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/libs/${CMAKE_ANDROID_ARCH_ABI}")
    
    add_library(
            native-lib
            SHARED
            native-lib.cpp)
    
    
    find_library(
            log-lib
            log)
    
    target_link_libraries(
            native-lib
            turbojpeg
            ${log-lib})

           3. jni代码如下:

    #include <jni.h>
    #include <string>
    #include <jpeglib.h>
    #include <android/bitmap.h>
    
    
    void write_jpeg_file(uint8_t *temp, int w, int h, jint q, const char *path) {
        // 1. 创建jpeg压缩对象
        jpeg_compress_struct jcs;
        // 错误回调
        jpeg_error_mgr errorMgr;
        jcs.err = jpeg_std_error(&errorMgr);
        // 创建压缩对象
        jpeg_create_compress(&jcs);
    
        // 2. 指定存储文件
        FILE *file = fopen(path, "wb");
        jpeg_stdio_dest(&jcs, file);
    
        // 3. 设置压缩参数
        jcs.image_width = w;
        jcs.image_height = h;
        // bgr
        jcs.input_components = 3;
        jcs.in_color_space = JCS_RGB;
        jpeg_set_defaults(&jcs);
        // 开启哈夫曼功能
        jcs.optimize_coding = true;
        jpeg_set_quality(&jcs, q, 1);
    
        // 4. 开始压缩
        jpeg_start_compress(&jcs, 1);
    
        // 5. 循环写入每一行数据
        int row_stride = w * 3;
        JSAMPROW row[1];
        while (jcs.next_scanline < jcs.image_height) {
            // 取出一行数据
            uint8_t *pixels = temp + jcs.next_scanline * row_stride;
            row[0] = pixels;
            jpeg_write_scanlines(&jcs, row, 1);
        }
    
        // 6 压缩完成
        jpeg_finish_compress(&jcs);
    
        // 7 释放内存
        fclose(file);
        jpeg_destroy_compress(&jcs);
    }
    
    extern "C"
    JNIEXPORT void JNICALL
    Java_com_lx_libjpeg_utils_ImageCompressUtils_native_1compress(JNIEnv *env, jobject thiz,
                                                                  jobject bitmap, jint q,
                                                                  jstring path) {
        // TODO: implement native_compress()
    
        const char *jni_path = env->GetStringUTFChars(path, 0);
        // 从bitmap中获取argb数据
        // 创建AndroidBitmapInfo对象
        AndroidBitmapInfo info;
        // 获取bitmap中的信息
        AndroidBitmap_getInfo(env, bitmap, &info);
        // 得到图片中的像素信息
        uint8_t *pixels; 
        AndroidBitmap_lockPixels(env, bitmap, (void **) &pixels);
        // jpeg argb中去掉他的a ===》 grg
        int w = info.width;
        int h = info.height;
        int color;
        // 申请一块内存用来存储rgb信息
        uint8_t *data = (uint8_t *) malloc(w * h * 3);
        memset(data, 0, w * h * 3);
        uint8_t *temp = data;
        uint8_t r, g, b;
        // 循环取出图片的每一个像素
        for (int i = 0; i < h; ++i) {
            for (int j = 0; j < w; ++j) {
                color = *(int *) pixels;
                // 取出rgb
                r = (color >> 16) & 0xFF;
                g = (color >> 8) & 0xFF;
                b = color & 0xFF;
                // 存放 以前的主流格式jpeg bgr
                *data = b;
                *(data + 1) = g;
                *(data + 2) = r;
                data += 3;
                // 指针跳过4个字节
                pixels += 4;
            }
        }
    
        // 把得到的新的图片的信息存放入一个新文件中
        write_jpeg_file(temp, w, h, q, jni_path);
    
        // 释放内存
        free(temp);
        AndroidBitmap_unlockPixels(env, bitmap);
        env->ReleaseStringUTFChars(path, jni_path);
    
    }
    
    
    

           4. 测试

     public void compress() {
            File input = new File("storage/emulated/0/original.jpg");
            Bitmap inputBitmap = BitmapFactory.decodeFile(input.getAbsolutePath());
            originalImage.setImageBitmap(inputBitmap);
            imageCompressUtils.compress(inputBitmap, 30, "storage/emulated/0/original_1.jpg");
            Toast.makeText(this, "执行完成", Toast.LENGTH_SHORT).show();
            compressImage.setImageBitmap(BitmapFactory.decodeFile("storage/emulated/0/original_1.jpg"));
        }

         5. 运行结果如下

    压缩效果: 压缩质量在 20 的时候用压缩出来的质量也还是挺好了,但是建议压缩质量在 30 -50 之间。

    压缩率:     大约压缩后的图片大小是原图的缩小 5 倍的样子。

     

    展开全文
  • 在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩);质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的...
  • 你需要知道的是有些平台对图片有限制,经过一系列的操作之后,最后告诉你图片太大,上传不了,你是不是会疯掉呢,我们在上传之前进行压缩就不会出现这样的问题啦,下面是图片压缩工具压缩大全,学到等于赚到哦!...
  • 免费在线快速图片压缩 官网:https://www.onlineimagetool.com/zh/ 特点: 免费!免费!免费! 没有限制!不受图片文件大小或图片数量的限制! 快速!只需几秒钟,拖放图片,即可压缩图片高达90%! 无损!看不...
  • 图片压缩之鲁班压缩

    千次阅读 2019-03-27 16:54:04
    本人技术菜 只讲怎么使用... 想知道原理的可以百度搜索鲁班压缩 ...//luban图片压缩 implementation 'top.zibin:Luban:1.1.3' 接下来准备好 file类型的图片文件 //鲁班图片压缩 Luban.with(this) ....
  • go 图片压缩

    2019-10-20 13:33:09
    Go图片压缩工具 在网络应用开发中,常通过对图片进行压缩来加快网页加载的速度。Go实现图片压缩十分简单,以下代码实现传入图片路径完成压缩工作的功能,支持jpg和png格式的图片文件。 //compress a jpg or png ...
  • 很多人都知道同等大小的情况下,PNG图片会比JPG图片清晰,想要将JPG图片压缩成PNG图片需要怎么样的操作方法呢?大家一起来看吧。 1:首先需要将自己的JPG图片准备好,放置在指定的文件夹中,文件夹放置在可以随时...
  • Python图片压缩

    千次阅读 2019-05-19 21:03:53
    Python图片压缩 原图片: 压缩后: 压缩后效果图: 使用方法: 在桌面文件夹新建名为“img”文件夹,将要压缩的图片放在里面即可,记得改变一下DIR路径。 第三方库:PIL glob 可自行选择分辨率 正常实现5M/JPG –...
  • JAVA API 自带图片压缩

    千次阅读 2016-07-29 15:32:31
    图片压缩
  • 1:首先需要将一款压缩软件安装到自己的电脑中,打开软件找到图片压缩,点击图片压缩进入到压缩的页面。 2:在压缩的页面找到添加文件以及添加文件夹,将需要压缩的图片文件添加到压缩的页面中,添加文件夹就是将...
  • 图片压缩算法

    千次阅读 2016-07-25 09:48:46
    图片压缩算法
  • Thumbnail 图片压缩

    千次阅读 2019-06-10 11:50:35
    图片压缩 1.采用 Thumbnail 公共类 2.采用 Thumbnail 方法 Thumbnails.of(inputStream) // of(filePath/inputStream) 使用源图片的路径或流,生成缩略图构造器 .sourceRegion(0, 0, imageWidth, imageHeight) //...
  • php图片压缩

    千次阅读 2019-05-05 10:39:59
    * 图片压缩类:通过缩放来压缩。 * 如果要保持源图比例,把参数$percent保持为1即可。 * 即使原比例压缩,也可大幅度缩小。数码相机4M图片。也可以缩为700KB左右。如果缩小比例,则体积会更小。 * * 结果:可...
  • 图片压缩框架

    千次阅读 2018-03-08 10:54:01
    安卓图片压缩,尽可能保证图片质量,清晰度的压缩,打开链接:https://github.com/lexluthors/CompressTools-Android
  • 可以压缩市面上大部分图片格式的图片压缩软件,一个2M的jpg数码照片,通图片压缩后可以压缩到200KB左右,压缩后的图片比之前缩小了10倍左右,而且压缩后的图片质量基本没什么变化,实现无损压缩。
  • 鲁班图片压缩

    千次阅读 2017-03-30 17:49:09
    Luban是图片压缩工具,通过参考或者自创压缩规则推求极致的压缩效果 目前的版本压缩效果主要参考微信。因为微信用户量最大,如果压缩后的图片越接近微信则越被用户接受。 说明 目前的Luban只是压缩结果接近...
  • 图片压缩,拍照上传压缩图片,比例压缩,data压缩,方便好用 YXJImageCompressor EasySwift
  • flutter图片压缩库对比

    千次阅读 2020-06-11 13:43:14
    flutter图片压缩库对比flutter图片压缩库对比flutter_luban压缩介绍 flutter图片压缩库对比 最近在做flutter的项目的时候用到了图片上传和图片压缩,开始使用的压缩库是flutter_luban,压缩的效果不错,但是在一些...
  • android 图片压缩,bitmap压缩总结

    千次阅读 2019-06-13 21:10:07
    1. 图片压缩相关概念 在android开发中,图片加载到内存中通常需要占用大量的内存,导致app性能过度消耗,严重的话可能会导致OOM异常,所以对图片进行优化就尤为重要。 android图片压缩的格式可以通过以下一张图进行...
  • swift 图片压缩

    千次阅读 2017-04-27 18:14:12
    微信分享、微博分享等等,对图片大小有要求,所以需要压缩,把该方法放到...// 图片压缩 func compressImage(maxLength: Int) -> UIImage { let tempMaxLength: Int = maxLength / 8 var compression: CGFloat = 1
  • 在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩);质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的...
  • 图片压缩其实是俩概念, 1、是 “压” 文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降, 2、是 “缩” 文件的尺寸变小,也就是像素数减少。长宽尺寸变小,文件体积同样会减小。 这个 ...
  • Android图片压缩

    千次阅读 2016-05-10 12:44:26
    其实我一直想写一篇关于图片压缩的博客,写博客其实也是为了整理一下自己学过的知识和思路作为记录。 Android的图片压缩不仅是在移动开发中是难点,在任何语言中处理起来都不是特别简单。一般来说分为两种:尺寸压缩...
  • Android 图片压缩

    2016-03-13 23:49:16
    原文链接:http://www.codeceo.com/article/android-image-compression.htmlAndroid图片压缩无非两种,一种质量压缩,一种像素压缩,前者多用于图片上传时,后者多用于本地图片展示缩略图时。对于质量压缩,主要用到...
  • Squoosh 是由 Google Chrome Labs 开源的一款适配当前所有主流浏览器的图片压缩工具,可以帮助开发大幅提升图片压缩效率。通过调节图片属性可以体验不同数值所带来的图片变化,并和原图进行对比,压缩图片做到定制化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,080
精华内容 12,032
关键字:

图片压缩