跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 图片尺寸 1200×900 缩小到 800×600 有办法更清晰吗?(图片查看工具 100%>75%是更清晰的)
未分類
2020 年 11 月 23 日

图片尺寸 1200×900 缩小到 800×600 有办法更清晰吗?(图片查看工具 100%>75%是更清晰的)

图片尺寸 1200×900 缩小到 800×600 有办法更清晰吗?(图片查看工具 100%>75%是更清晰的)

資深大佬 : wzw 6

目前用图片查看器缩小是会看得更清晰,100% > 75%的时候是更清晰的。 但是用 pillow 的 resize 就惨不忍睹了。

1200×900 缩小到 800×600 或者 600×450

有什么办法, 用 python 实现吗?

原图:
图片尺寸 1200x900 缩小到 800x600 有办法更清晰吗?(图片查看工具 100%>75%是更清晰的)

大佬有話說 (37)

  • 資深大佬 : jdhao

    resize 的时候是有 filter 参数可调节的,查一下,换一个高精度的 filter,默认的 filter 不行的

  • 主 資深大佬 : wzw

    @jdhao #1 https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.resize

    请问你说的哪个参数, 我试过网上说的一些

  • 主 資深大佬 : wzw

    @jdhao #1 基本都是说 Image.ANTIALIAS, 但是无效

  • 資深大佬 : jdhao

    @wzw 用 PIL 的话,PIL.Image.LANCZOS,这个精度应该是最高的,速度最慢

  • 資深大佬 : jdhao

    @jdhao 或者 bicubic 也试一下

  • 資深大佬 : songzhengqian

    个人观点:从大尺寸变为小尺寸分辨率就会降低,相当于压缩了。

  • 主 資深大佬 : wzw

    @jdhao #4 @jdhao #5 LANCZOS/bicubic 效果都还是很模糊

    请看结果 图片尺寸 1200x900 缩小到 800x600 有办法更清晰吗?(图片查看工具 100%>75%是更清晰的)

  • 主 資深大佬 : wzw

    @songzhengqian #6 但是 图片查看器缩小是会看得更清晰,100% > 75%、50%的时候是更清晰的

    是不是需要提升 dpi

  • 資深大佬 : jdhao

    @wzw Let me see see. 等会给你结果。

  • 資深大佬 : ipwx

    要不要试试输出 pdf 。。。

  • 資深大佬 : jifengg

    倒是没有看出缩小的时候哪里更清晰了。
    不过发现 v 站的图床,png 图片缩放之后尺寸反而大了,原图 20K,贴出来的大图是 80K 。 @livid

  • 資深大佬 : xiangyuecn

    无法正确表达 0.49 像素,四舍五入为 0,普通缩放的时候那些斜线最容易丢失

  • 主 資深大佬 : wzw

    @jdhao #9 等你结果,谢谢

    @ipwx #10 一定要图, 要插入到 word 用

    @jifengg #11 你用看图软件打开, 然后 100%》 50%试试

    @xiangyuecn #12 目前就是想和看图软件一样缩放就行

  • 主 資深大佬 : wzw

    @jifengg #11 我也觉得奇怪, 应该这样看才是对的, 才是原图:

    https :// i.v2ex.co / CS69YwBh.png

    图片尺寸 1200x900 缩小到 800x600 有办法更清晰吗?(图片查看工具 100%>75%是更清晰的)

  • 資深大佬 : zhoushiya

    https://i.loli.net/2020/11/18/wDqokbLXS7vOJEh.png

  • 主 資深大佬 : wzw

    @zhoushiya #15 请问你是如何做到的, 谢谢!

  • 資深大佬 : zhoushiya

    @wzw #16 做图软件 firework 缩放的。。。。。。它也可以设置批处理脚本,你如果有大量图可以用批处理

  • 主 資深大佬 : wzw

    @zhoushiya #17

  • 資深大佬 : also24

    非整数倍的缩放,我一般习惯先放大再缩小,这是先将图片拉伸到 2400*1800,再缩小到 800*600 的效果。

    https://i.loli.net/2020/11/18/D2hibEvwmM1VLUN.png

  • 資深大佬 : jdhao

    @wzw 我试了 PIL 的所有 resample filter,似乎都不行,出来的都是模糊的,另外 Image.ANTIALIAS == Image.LANCZOS 。

    不过 opencv 的 resize 效果还行,下面是可运行的代码:

    import cv2

    def main():
    im = cv2.imread(‘big_image.png’)
    im_resize = cv2.resize(im, (800, 600), interpolation=cv2.INTER_LANCZOS4)
    write_param = [cv2.IMWRITE_PNG_COMPRESSION, 5]
    cv2.imwrite(‘big-resized.png’, im_resize, write_param)

    if __name__ == “__main__”:
    main()

    上面的 interpolation 类似 PIL 中的 resample filter,除了 cv2.INTER_LANCZOS4,还可以试试 cv2.INTER_AREA,这俩出来的效果比较接近。还有一点值得注意的是,你给的原图只有 20kb 左右,opencv 出来的图片文件大小变大了不少,应该是压缩算法导致的,上面 wirte_param 那行可以调整压缩比例,最高 9,但是压缩下来的图片还是比原图大了不少。

  • 資深大佬 : ipwx

    @wzw 其实我指的是先 => pdf,然后用别的软件 => png 。哈哈哈

  • 資深大佬 : ipwx

    pdf2png 你可以试试 imagemagick 。我反正日常用一个脚本:

    #!/bin/bash
    DPI=”${DPI:-192}”
    FROM=”$1″
    DST=”$2″
    BGARGS=”$3″
    if [ “${FROM}” = “” ]; then
    echo “pdf2png from-file [to-file]”
    fi
    if [ “${DST}” = “-white” ]; then
    DST=””
    BGARGS=”white”
    fi
    if [ “${DST}” = “” ]; then
    DST=”${FROM/.pdf/.png}”
    fi
    if [ “${BGARGS}” != “” ]; then
    BGARGS=”-background ${BGARGS} -alpha background -alpha remove”
    fi
    convert -density “${DPI}” -strip -trim “${FROM}” -quality 100 ${BGARGS} “${DST}”

  • 資深大佬 : futou

    就几张图的话:图片查看器缩小 ->截图另存为

  • 主 資深大佬 : wzw

    @ipwx #21 还要绕一次 pdf 呀,,,我目前方案首选图片直接处理吧,

  • 主 資深大佬 : wzw

    @futou #23 很多很多, 必须集成到系统里面的

  • 資深大佬 : futou

    @wzw 你发的原图是调色板图像,也许这是你处理结果不好的原因?我试了试 matlab 的 imresize,不放大看的话,默认参数缩放结果就非常清晰,你也可以试试 scipy 里的 imresize,结果也不差。

  • 資深大佬 : ipwx

    @wzw 如果你是 matplotlib 产生的图,你指定 plt.figure(figsize=) 就可以控制输出图像大小了。最好把两边空白也裁了,我记得是 plt.tight_layout() 还是啥。。。

  • 主 資深大佬 : wzw

    @ipwx #27 matplotlib 以后还有一些二次处理的动作, 所以这条不适用, 一定要多次调整大小了

  • 主 資深大佬 : wzw

    @futou #26 调色板图像? 我目前用的是 matplotlib fig.savefig 直接保存的

  • 資深大佬 : ipwx

    @wzw 把 pdf 输出到临时目录,然后用其他工具转换成 png 。

  • 資深大佬 : JCZ2MkKb5S8ZX9pq

    其实上面说的几种缩图算法应该是对的,缩出来的线条断点就是取样的问题。

    img.thumbnail((long_edge_limit, long_edge_limit), Image.ANTIALIAS)

    直接拿这句试了试,导出为 png 。
    thumbnail 是限制长边,自动缩。长边 800 。

    图片尺寸 1200x900 缩小到 800x600 有办法更清晰吗?(图片查看工具 100%>75%是更清晰的)

    提供几个思路哦
    原图如果不是 rgb,而是类似 gif 的 256 色 pattern,会导致颜色不足从而掉色,要先转模式。
    缩图之后直接 show 一下看看。
    然后再存盘,看看会不会是导出格式的问题。

  • 資深大佬 : jdhao

    @JCZ2MkKb5S8ZX9pq 有道理,主原图是 RGBA 格式的 PNG 图片,并且是 palette 图像,我试了一下 PIL 读取图像,然后再转 RGBA 格式 ( palette 图像转 RGBA ),然后再 resize 和 save,图像质量高了很多。

  • 資深大佬 : JCZ2MkKb5S8ZX9pq

    @jdhao

    一种可能是导入后格式被修改过了,还有一种可能是代码出了问题。因为他出错的图明显是 nearest 采样的,刚看了下文档,版本问题好像会影响默认值。

    If omitted, it defaults to PIL.Image.ANTIALIAS. (was PIL.Image.NEAREST prior to version 2.5.0)

    但是考虑到 lz 试了好几种,所以感觉可能是参数没起效果(但回退到了 nearest )。
    也就是说如果 lz 的 PIL 是 2.5 以下的,可能是参数没加对。如果是新版本,那可能是图本身的问题。可以考虑在格式转换前后都打印一下颜色模式,或者 png 输出的话,强制加一步模式转换试试看。

    img = img.convert(‘RGBA’)

  • 資深大佬 : JCZ2MkKb5S8ZX9pq

    上面是 thumbnail 的,resize 的写得更清楚。

    If omitted, or if the image has mode “1” or “P”, it is set PIL.Image.NEAREST.

    那就是去查图像 color mode 了。

    [Image Module — Pillow (PIL Fork) 2.6.1 documentation]( https://pillow.readthedocs.io/en/3.0.0/reference/Image.html)

  • 資深大佬 : jdhao

    @JCZ2MkKb5S8ZX9pq 嗯,那就解释了为啥设置其他 filter 没效果了,因为是主的原图片是 mode 是 P,所以强制使用 PIL.Image.NEAREST 来采样的。

    你看的仔细,我看到这个时候没意识到是因为图像模式问题,赞

  • 資深大佬 : JCZ2MkKb5S8ZX9pq

    @jdhao 美工出身,对这个比较敏感。

  • 主 資深大佬 : wzw

    @also24 #19 你是直接用 pillow 吗?
    @JCZ2MkKb5S8ZX9pq #33 厉害,不愧是美工出生,我今天试试 img = img.convert(‘RGBA’)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具