如果对GIF进行模糊化加边扩增

举报
tsinghuazhuoqing 发表于 2021/12/26 23:11:00 2021/12/26
【摘要】   ▌01 为何需要进行模糊化扩边? 在很多视频讲解节目中,很多情况下需要抓取网络上的一些视频、图片资料。在存在以下几种情况使其无法适应当前高清画面的只做需求: 原始图像资源分辨率低;...

 

01 为何需要进行模糊化扩边?


在很多视频讲解节目中,很多情况下需要抓取网络上的一些视频、图片资料。在存在以下几种情况使其无法适应当前高清画面的只做需求:

  • 原始图像资源分辨率低;
  • 原始图片中存在一些LOGO区域,需要在抓取的时候切割掉;
  • 原始图片的长宽比不符合最终节目源的要求;

在此情况下,需要将抓取到的视频节目进行调整。当前的调整包括两种情况:

  • 在原有的视频图片背后增加一个大的清晰背景;
  • 将原来的视频图片进行模糊加边;

下面给出了原始的视频与加边后的效果对比。

▲ 原版GIF图片

▲ 原版GIF图片

▲ 增加模糊化边缘之后的GIF

▲ 增加模糊化边缘之后的GIF

在附件中给出了使用PYTHON程序对于GIF进行模糊加边扩展的算法。

 

※ 附件


1.进行GIF模糊化扩边Python程序

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# GIFBLUR.PY                   -- by Dr. ZhuoQing 2021-02-21
#
# Note:
#============================================================

from head import *
from PIL import Image,ImageFilter

#------------------------------------------------------------
gifid = tspgetgifid()

if len(gifid) == 0:
    printf("No gif DOP.\a")
    exit()

viewsize = tspgetviewdcrange()
viewWidth = viewsize[4]
viewHeight = viewsize[5]

#------------------------------------------------------------
dopfile = tspgetdopfile(gifid[0])
gifpages = tspgetgifpage(gifid[0])

filepath = os.path.dirname(dopfile)
filebase = os.path.basename(dopfile)
fileext = filebase.split('.')[1]

#------------------------------------------------------------
gifviewratio = 0.8

def pic2blurside(picfile, ratio):
    image = Image.open(picfile).convert('RGB')
    imgdata = image.getdata()

    imgwidth = imgdata.size[0]
    imgheight = imgdata.size[1]

    #--------------------------------------------------------
    if imgwidth/imgheight > viewWidth/viewHeight:
        view0_w = imgwidth
        view0_h = imgwidth * viewHeight / viewWidth
        viewi_h = imgheight
        viewi_w = imgheight * viewWidth / viewHeight
    else:
        view0_h = imgheight
        view0_w = imgheight * viewWidth / viewHeight
        viewi_w = imgwidth
        viewi_h = imgwidth * viewHeight / viewWidth

    view1_w = int(view0_w / ratio)
    view1_h = int(view0_h / ratio)

    #--------------------------------------------------------
    left = int((imgwidth - viewi_w) / 2)
    right = imgwidth - left
    top = int((imgheight - viewi_h) / 2)
    bottom = imgheight - top

    imgcrop = image.crop((left, top, right, bottom))
    imgview = imgcrop.resize((view1_w, view1_h), resample=1)
    imgview = imgview.filter(ImageFilter.GaussianBlur(radius=20))

    left = int((view1_w - imgwidth)/2)
    top = int((view1_h - imgheight)/2)
    imgview.paste(image, (left, top))

    imgview.save(picfile)

#------------------------------------------------------------

if len(sys.argv) > 1:
    gifviewratio = float(sys.argv[1])

printf("Proc GIF:%s/%d/%5.2f\a"%(filebase, gifpages, gifviewratio))

#------------------------------------------------------------
for i in range(gifpages):
    filename1 = '%04d.%s'%(i, fileext)
    giffile = os.path.join(filepath, filename1)

    tspshowinfor('%d '%i)

    pic2blurside(giffile, gifviewratio)

#------------------------------------------------------------
printf("\a")
tsprefreshimagebuffer()
tsprv()

#------------------------------------------------------------
#        END OF FILE : GIFBLUR.PY
#============================================================

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/113916304

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。