0%

yt-dlp

安装

1
2
3
4
5
6
7
8
# Linux系统下的安装
yay -Sy yt-dlp

# 更新
yt-dlp -U

# 使用pip安装
pip install yt-dlp

使用

1
2
3
yt-dlp [OPTIONS] [--] URL [URL...]

# 选项众多,下面只介绍基本的用法

支持的网站

1
2
3
4
5
6
7
8
9
10
11
# 支持的网站众多,本人常用到的有

youtube
bilibili去
kuwo
网易云音乐
QQ音乐
douyin
cctv
others see: https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md

一般下载

1
2
3
4
5
# 默认 720P webm
yt-dlp url

# 下载并转换成为mp4
yt-dlp –merge-output-format mp4 url

查看视频可以下载的所有分辨率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
yt-dlp -F url
# 返回的信息包含:
ID 文件ID
EXT 格式
RESOLUTION 分辨率
FPS 视频的帧率
FILESIZE 文件大小
VCODEC 正在使用的视频编解码器的名称
ACODEC 正在使用的音频编解码器的名称,像mp4a.40.2(720p)就直接包含了音频
TBR 音频和视频的平均比特率(以 KBit/s 为单位)
VBR 平均视频比特率(以 KBit/s 为单位)
ABR 平均音频比特率(以 KBit/s 为单位)
ASR 以赫兹为单位的音频采样率
MORE INFO 更多信息

视频选择

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
--playlist-start NUMBER          播放列表视频开始(默认为1)
--playlist-end NUMBER 播放列表视频结束(默认是最后)
--playlist-items ITEM_SPEC 播放列表视频项目下载。指定
播放列表中视频的索引
用逗号隔开,如:"——playlist-items
1 2 5 8英寸,如果你想下载视频
在播放列表中索引1,2,5,8。你可以
指定范围:”——playlist-items
1-3,7,10-13",它会下载视频
在指数12 3 7 10 11 12和13处
--max-downloads NUMBER 下载NUMBER文件后中止
--min-filesize SIZE 切勿下载任何小于尺寸(如50k或446m)的影片。
--max-filesize SIZE 切勿下载超过大小的影片(例如50k或446m)
--date DATE 只下载在此日期上传的视频。日期可以是“YYYYMMDD”或以下格式"
(now l today) [+-][0-9] (day lweek | month l year) (s)?"
--datebefore DATE 只下载在此日期或之前上传的视频。接受的日期格式与——date相同
--dateafter DATE 只下载在此日期或之后上传的视频。接受的日期格式与——date相同
--match-filter FILTER 通用的视频滤镜。任何领域(见
“输出模板”)可以与
数字或使用运算符的字符串
定义于“过滤格式”。你可以
还可以简单地指定要匹配的字段
Field is present and !字段"来检查是否
该字段不存在。此外,
Python风格的正则表达式匹配
可以使用“~=”和多个
过滤器可以用“&”进行检查。使用“\”
转义"&"或引号(如果需要)。例如:
——match-filter”!is_live & like_count > ?One hundred.
& description~='(?i)\bcats \& dogs\b'"
只匹配那些不是直播的视频,有
一个点赞数超过100个(或类似数)
字段不可用),并具有
包含短语“猫”的描述
&狗”(忽略案例)
--no-match-filter 不要使用通用的视频过滤器(默认)
--no-playlist 如果URL指的是视频和播放列表,则只下载视频
--yes-playlist 如果URL是指视频和播放列表,请下载播放列表
--age-limit YEARS 只下载适合特定年龄的视频
--download-archive FILE 只下载档案文件中没有列出的视频。记录所有下载视频的id
--break-on-existing 当遇到存档中的文件时,停止下载过程
--break-on-reject 当遇到已过滤掉的文件时,停止下载过程
--skip-playlist-after-errors N 允许的失败数,直到跳过播放列表的其余部分
--no-download-archive 不要使用存档文件(默认)

下载选项

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
-N, --concurrent-fragments N     应该并发下载的dash/ hlnative视频片段数(默认为1)
-r, --limit-rate RATE 最大下载速率(字节/秒)(例如50K或4.2M)
--throttled-rate RATE 最小下载速率(以字节/秒为单位),低于此速率时将进行节流并重新提取视频数据(例如100K)


-R, --retries RETRIES 重试次数(默认为10),或“无限”
--fragment-retries RETRIES 一个片段的重试次数(默认为10),或“无限”(DASH, hLsnative和~ AAAISM)
--skip-unavailable-fragments 跳过DASH hlnative和ISM的不可用片段(默认)
(Alias: --no-abort-on-unavailable-fragment)
--abort-on-unavailable-fragment 如果片段不可用,则中止下载
(Alias: --no-skip-unavailable-fragments)
--keep-fragments 下载完成后,将下载的片段保存在磁盘上
--no-keep-fragments 下载完成后删除下载的片段(默认)
--buffer-size SIZE 下载缓冲区的大小(例如1024或16K)(默认是1024)
--resize-buffer 缓冲区大小从初始值——buffer-size(默认值)自动调整
--no-resize-buffer 不自动调整缓冲区大小
--http-chunk-size SIZE 基于块的HTTP下载块的大小(例如10485760或10M)(默认禁用)。
可能对绕过网络服务器施加的带宽节流有用(实验)
--playlist-reverse 按倒序下载播放列表视频
--no-playlist-reverse 按默认顺序下载播放列表视频(默认)
--playlist-random 按随机顺序下载播放列表视频
--xattr-set-filesize 设置文件xattribute ytdl。文件大小与预期的文件大小
--hls-use-mpegts 对HLS视频使用mpegts容器;允许一些播放器在下载时播放视频,
并减少下载中断时文件损坏的机会。这在默认情况下为实时流启用
--no-hls-use-mpegts 不要在HLS视频中使用mpegts容器。当不下载实时流时,这是默认值
--downloader [PROTO:]NAME 要加载的外部下载程序的名称或路径
使用(可选地)以协议为前缀
(http, ftp, m3u8, dash, rstp, rtmp, mms)到
用它来。目前支持本地,
Aria2c avconv axel curl ffmpeg httpie
wget(推荐:aria2c)。您可以使用
此选项多次设置不同
不同协议的下载程序。为
示例:——downloader aria2c——downloader
"dash,m3u8:native"将使用aria2c
Http /ftp下载,和本机
下载的dash/m3u8下载
(别名:——external-downloader)
--downloader-args NAME:ARGS 把这些论点交给外部
下载器。指定下载器名称和
参数由冒号":"分隔。为
Ffmpeg,参数可以传递给
不同的位置使用相同的语法
——postprocessor-args。你可以用这个
选择多次给予不同
不同下载程序的参数
(别名:——external-downloader-args)


视频格式选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-f, --format FORMAT              视频格式代码,详见“格式选择”
-S, --format-sort SORTORDER 根据给定的字段对格式进行排序,详见“格式排序”
--S-force, --format-sort-force 强制用户指定的排序顺序优先于所有字段,详情请参阅“排序格式”
--no-format-sort-force 有些字段优先于用户指定的排序顺序(默认),请参阅“排序格式”了解更多细节
--video-multistreams 允许多个视频流合并成一个单一的文件
--no-video-multistreams 每个输出文件只下载一个视频流(默认)
--audio-multistreams 允许多个音频流合并成一个单一的文件
--no-audio-multistreams 每个输出文件只下载一个音频流(默认)
--prefer-free-formats 更喜欢带有免费容器的视频格式 而非同等质量的免费产品。使用
与“-S ext”严格偏好免费 集装箱不论质量如何
--no-prefer-free-formats 不要给空闲容器任何特殊的优先级(默认)
--check-formats 检查所选的格式是否确实可以下载
--no-check-formats 不检查所选的格式实际上是可下载的
-F, --list-formats 列出每个视频的可用格式。模拟除非使用-no- simulation
--merge-output-format FORMAT 如果需要合并(例如,bestvideo+bestaudio),输出到给定的容器格式。mkv mp4 ogg
webm flv。如果不需要合并,则忽略


字母选项

1
2
3
4
5
6
7
8
9
10
--write-subs                     编写字幕文件
--no-write-subs 不写字幕文件(默认)
--write-auto-subs 写自动生成的字幕文件(别名:——Write -automatic-subs)
--no-write-auto-subs 不写自动生成的字幕(默认)(别名:——no-write-automatic-subs)
--list-subs 列出每个视频可用的字幕。模拟除非使用-no- simulation
--sub-format FORMAT 字幕格式,接受格式优先,例如:“srt”或“ass/srt/best”
--sub-langs LANGS 语言字幕下载(可以是正则表达式)或用逗号分隔的“全部”。
(例如:——sub-langs en.*,ja 带有"-"的语言代码免除了它
从请求的语言。(如:——子 使用——list-subs 可用语言标记列表

格式选择

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 根据文件明细列表选择对应格式的文件id,比如:下载文件id=140的文件
yt-dlp -f 140 url
默认情况下,如果您不传递任何选项,yt-dlp 会尝试下载最佳可用质量。
这通常等同于使用-f bestvideo*+bestaudio/best.
但是,如果启用了多个音频流 ( --audio-multistreams),
则默认格式更改为-f bestvideo+bestaudio/best.
同样,如果 ffmpeg 不可用,或者如果您使用 yt-dlp 流式传输到stdout( -o -),
则默认值变为-f best/bestvideo+bestaudio.

all: 选择所有格式
mergeall:选择和合并所有格式(必须与使用--audio-multistreams,--video-multistreams或两者)
b*, best*: 无论是否包含视频或音频,选择最佳质量格式
w*, worst*: 选择质量最差的格式,不管它是否包含视频或音频
b, best: 选择包含视频和音频的最佳质量格式。相当于best*[vcodec!=none][acodec!=none]
w, worst: 选择包含视频和音频的最差质量格式。相当于worst*[vcodec!=none][acodec!=none]
bv, bestvideo: 选择最佳质量的纯视频格式。相当于best*[acodec=none]
wv, worstvideo: 选择质量最差的纯视频格式。相当于worst*[acodec=none]
bv*, bestvideo*: 选择包含视频的最佳质量格式。它还可能包含音频。相当于best*[vcodec!=none]
wv*, worstvideo*: 选择包含视频的最差质量格式。它还可能包含音频。相当于worst*[vcodec!=none]
ba, bestaudio: 选择质量最好的纯音频格式。相当于best*[vcodec=none]
wa, worstaudio: 选择质量最差的纯音频格式。相当于worst*[vcodec=none]
ba*, bestaudio*: 选择包含音频的最佳质量格式。它还可能包含视频。相当于best*[acodec!=none]
wa*, worstaudio*: 选择包含音频的最差质量格式。它还可能包含视频。相当于worst*[acodec!=none]

格式过滤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
可以通过在括号中放置条件来过滤视频格式,如 (或者因为没有选择器的过滤器被解释为 )。
-f "best[height=720]"-f "[filesize>10M]"best

以下数值元字段可用于比较 、 、 、 (等于)、(不等于):<<=>>==!=

filesize:字节数(如果事先知道)
filesize_approx:字节数的估计值
width:视频的宽度(如果已知)
height:视频的高度(如果已知)
aspect_ratio:视频的宽高比(如果已知)
tbr:音频和视频的平均比特率(以 KBit/s 为单位)
abr:平均音频比特率(以 KBit/s 为单位)
vbr:平均视频比特率(以 KBit/s 为单位)
asr:以赫兹为单位的音频采样率
fps:帧率
audio_channels:音频通道数
stretched_ratio:视频像素的像素,如果不是正方形width:height

后处理选项 -x

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
96
97
98
99
100
101
102
103
104
-x, --extract-audio              将视频文件转换为音频文件(需要ffmpeg和ffprobe)
--audio-format FORMAT 指定音频格式以转换音频
当使用-x时。目前支持
格式有:best(默认)或
最好| aac | flac mp3 | | m4a格式|作品| vorbis | wav
--audio-quality QUALITY 指定ffmpeg音频质量,插入一个
值介于0(较好)和9(较差)之间
VBR或特定的比特率,如128K (默认5)
--remux-video FORMAT 将视频重新放入另一个容器,如果 必要的
(目前支持:mp4|mkv|flv | webm | mov avi mp3 | | | mka | m4a格式| ogg |作品)。
如果 目标容器不支持 视频/音频编解码器,重放将失败。你
可以指定多个规则;如。 “aac>m4a/mov>mp4/mkv”将重放aac到 M4a, mov到mp4,其他任何东西到mkv。
--recode-video FORMAT 重新编码成另一种格式,如果 重新编码是必要的。的语法和 支持的格式与——remux-video相同
--postprocessor-args NAME:ARGS 将这些参数给后处理器。
指定后处理器/可执行程序名称
参数由冒号":"分隔
将参数赋给指定的
后处理程序/可执行。支持页:
合并,ModifyChapters SplitChapters,
ExtractAudio、VideoRemuxer VideoConvertor,
元数据、EmbedSubtitle EmbedThumbnail,
SubtitlesConvertor ThumbnailsConvertor,
FixupStretched、FixupM4a FixupM3u8,
FixupTimestamp FixupDuration。的
支持的可执行文件有:AtomicParsley,
FFmpeg FFprobe。你也可以指定
“PP+EXE:ARGS”给出了论证
仅在使用时指定可执行文件
由指定的后处理程序处理。
此外,对于ffmpeg/ffprobe, "_i"/"_o"
可以附加到前缀可选
后面跟着一个数字来传递参数
在指定的输入/输出文件之前。例如:
——ppa“合并+ ffmpeg_i1: - v安静”。你可以
多次使用这个选项
不同的论点
后处理程序。(别名:——ppa)
-k, --keep-video 后期处理后将中间视频文件保存在磁盘上
--no-keep-video 后期处理后删除中间视频文件(默认)
--post-overwrites 覆盖后期处理的文件(默认)
--no-post-overwrites 不覆盖后期处理的文件
--embed-subs 视频中嵌入字幕(仅mp4, webm和mkv视频)
--no-embed-subs 不要嵌入字幕(默认)
--embed-thumbnail 嵌入缩略图在视频作为封面艺术
--no-embed-thumbnail 不嵌入缩略图(默认)
--embed-metadata 在视频文件中嵌入元数据。还增加了
章节文件除非-no-add-章
别名:——add-metadata
--no-embed-metadata 不添加元数据到文件(默认)(别名:——no-add-metadata)
--embed-chapters 添加章节标记到视频文件(别名:——Add -章)
--no-embed-chapters 不添加章节标记(默认)(别名:——no-add-章)
--parse-metadata FROM:TO 解析其他领域的元数据,如标题/艺术家;详情请参见“修改元数据”
--replace-in-metadata FIELDS REGEX REPLACE 使用给定的正则表达式替换元数据字段中的文本。这个选项可以多次使用
--xattrs 将元数据写入视频文件的xattrs(使用dublin core和xdg标准)
--fixup POLICY 自动纠正系统的已知故障
文件。一个永远(什么都不做),警告(只有)
发出警告),detect_or_warn
违约;如果可以,修复文件,警告
否则),强制(尝试修复即使文件
已经存在
--ffmpeg-location PATH ffmpeg二进制文件的位置;二进制文件或其包含目录的路径
--exec CMD 在文件上执行命令
下载和后处理。相同
语法作为输出模板可以使用
将任何字段作为参数传递给
命令。附加字段“filepath”
它包含了
下载的文件也可用。如果没有
字段被传递,%(filepath)q被追加
直到命令的最后。这个选项可以
多次使用
--no-exec 删除任何先前定义的——exec
--exec-before-download CMD 执行命令之前,实际下载。语法与——exec相同
但是“filepath”不可用。这选项可以多次使用
--no-exec-before-download 删除任何以前定义的- execute -before-download
--convert-subs FORMAT 将字幕转换为另一种格式(目前支持:srt|vtt|ass|lrc)(别名:——Convert -副标题)
--convert-thumbnails FORMAT 将缩略图转换为另一种格式(目前支持:jpg|png)
--split-chapters 将视频分割成多个文件基于
内部章节。“章:”前缀
可以与"——paths""——output"一起使用
设置分割的输出文件名
文件。详见“OUTPUT TEMPLATE”
--no-split-chapters 不要基于章节分割视频(默认)
--remove-chapters REGEX 删除标题匹配的章节
给定的正则表达式。时间范围
用“*”作为前缀也可以在适当的地方使用
的章节,以删除指定的范围。
如:remove-chapters“* 10:15-15:00”
——remove-chapters“介绍”。这个选项可以多次使用
--no-remove-chapters 不要从文件中删除任何章节(默认)
--force-keyframes-at-cuts 强制关键帧围绕章节之前
删除/分裂。需要一个
重新编码会很慢,但是
最终的视频可能有更少的伪影
在削减
--no-force-keyframes-at-cuts 当切割/分割章节时,不要强制关键帧(默认)插件的(区分大小写)名称
--use-postprocessor NAME[:ARGS] 启用后处理器,以及 (可选)传递给它的参数,
由冒号":"分隔。参数是一个
分号";"分隔的NAME=VALUE列表。
"when"参数决定 后处理程序被调用。它可以是
“pre_process”(提取)后, "before_dl"(视频下载前),
"post_process"(视频下载后; 或"after_move"(在移动文件后
最终到达目的地)。这个选项可以 可多次使用以添加不同 后处理程序

格式排序

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
您可以best使用-S( --format-sort)更改被视为 的标准。这个的一般格式是--format-sort field1,field2....

可用的字段是:

hasvid:优先考虑具有视频流的格式
hasaud:优先考虑具有音频流的格式
ie_pref:提取器给出的格式首选项
lang:提取器给出的语言偏好
quality:提取器给出的格式质量
source: 提取器给出的来源偏好
proto: 用于下载的协议 ( https/ ftps> http/ ftp> m3u8_native/ m3u8> http_dash_segments> websocket_frag> 其他 > mms/ rtsp> > 未知 > f4f/ f4m)
vcodec:视频编解码器(av01> vp9.2> vp9> h265> h264> vp8> h263> theora>其它>未知)
acodec:音频编解码器(opus> vorbis> aac> mp4a> mp3> ac3> dts>其他>未知)
codec: 相当于 vcodec,acodec
vext: 视频扩展名 ( mp4> webm> flv> 其他 > 未知)。如果--prefer-free-formats使用,webm则首选。
aext:音频扩展(m4a> aac> mp3> ogg> opus> webm> 其他 > 未知)。如果--prefer-free-formats使用,则顺序更改为opus> ogg> webm> m4a> mp3> aac。
ext: 相当于 vext,aext
filesize: 确切的文件大小,如果事先知道的话。这将不适用于 mu38 和 DASH 格式。
fs_approx:根据清单计算的近似文件大小
size: 如果可用,则为精确文件大小,否则为近似文件大小
height: 视频高度
width: 视频宽度
res:视频分辨率,以最小尺寸计算。
fps: 视频帧率
hdr: 视频的动态范围 ( DV> HDR12> HDR10+> HDR10> HLG> SDR)
tbr:以 KBit/s 为单位的总平均比特率
vbr: 以 KBit/s 为单位的平均视频比特率
abr:以 KBit/s 为单位的平均音频比特率
br: 相当于使用 tbr,vbr,abr
asr:以Hz为单位的音频采样率
请注意,在 Windows 上,您可能需要使用双引号而不是单引号。

#下载并合并最好的纯视频格式和最好的纯音频格式,
#或者如果纯视频格式不可用,则下载最好的组合格式
$ yt-dlp -f ' bv+ba/b '

下载播放列表中的多个视频 -I

1
2
3
4
5
6
7
8
9
10
11
1. 逗号分隔的playlist_index
2. 要下载的项目。您可以指定一个 范围使用“[START]:[STOP][:STEP]”。向后兼容 也支持。使用负指数 从右数和负数 STEP 以相反的顺序下载。例如“-I

# 下载第1,3,5个视频
yt-dlp -I "1,3,5" url

# 指定范围,下载第1~15个视频中每相隔2个,则是1,3,5,7,9,11,13,15
yt-dlp "1:15:2" url

# 指定范围及顺序,下载第1~5集,从第5~1的顺序下载
yt-dlp "1:5:-1" url

文件信息列表排序 -S

1
2
# 按照vbr-平均视频比特率
yt-dlp -F -S "vbr" url

安装和配置

安装

生成许可证文件

1
2
3
1. 复制文件目录下的"PTC.LICENSE.WINDOWS.2023-10-31-SSQ"到桌面
2. 运行目录中的"FillLicense.bat" 生成许可证文件 "PTC_D_SSQ.dat"
3. 并将生成的许可证文件"PTC_D_SSQ.dat"移动到"D:\Ptc_license\"

开始安装

1
2
3
4
5
6
7
8
9
10
11
1. 找到安装文件目录下的PTC Creo 10.0.2.0 Win64.iso 开始安装
2. 指定安装目录"D:\Ptc_creo10.0"
3. 复制安装文件目录下的"_SolidSQUAD_\Creo 10.0.2.0 "目录,覆盖安装目录下的同名文件和目录
4. 运行安装文件目录下的"SolidSQUADLoaderEnabler.reg" ,将注册表文件添加到注册表
5. 添加浮动许可证,以管理员身份运行安装目录下的“\Creo 10.0.2.0\Parametric\bin\reconfigure"
- 重新配置现有安装的许可证
- 点击NEXT--->NEXT--->NEXT 直到自定义应用程序界面 进入“命令配置” 选项
- 编辑, 将左侧的可用许可证全部添加到 “启动扩展及浮动选项” 栏内。点确定
- 安装直到完成

6. 重启电脑

配置Creo

基本配置

Manjaro安装本地包

tar.gz/tar.xz 等格式

1
2
3
4
5
6
# 已经下载到本地的
sudo pacman -U package_name

# 安装远程包,不在软件仓库中的,格式为tar.gz / tar.xz
# 如:url = http://www.example.com/xxx.tar.gz
sudo pacman -U url

deb 格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装转包工具debtap,安装前先查询是否已经安装
sudo pacman -Q debtap

# 若没有则安装
sudo pacman -S yaourt
yaurt -S debtap

# 安装后更新,如果更新失败,可能需要换源或走VPN
sudo debtap -u

# 转包,期间可能需要包名称,自定义即可.要输入License时,填写GPL
sudo debtap xxx.deb

# 安装转包成功的包
sudo pacman -U xxx.tar.xz

配置CloudFlare-warp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 安装 clouldflare-warp-bin
yay -S cloudflare-warp-bin

# 启用服务
sudo systemctl enable --now warp-svc.service

# 任务栏查看状态
systemctl --user enable --now warp-taskbar

# 注册
warp-cli register

# 连接
warp-cli connect

# 断开连接
warp-cli disconnect

网络所搜技术

为什么而搜?

  1. 了解某些事物
  2. 学习某项技能,知识
  3. 创作
  4. 完成某项工作

搜什么?

  1. 信息资讯
  2. 知识技能
  3. 素材文件
  4. 工具或者软件

去哪里搜?

  1. 百度
  2. 谷歌
  3. 必应
  4. 搜狗

常用技巧

  1. 关键词

    • 限定关键词,用双引号将关键词包含起来.”keyword”
    • 搜索的结果中必定包含关键词
    • 可以存在多个关键词 “亚运会金牌榜” “田径”
  2. 限定标题内容

    • 语法 intitle: keyword
    • 在标题中包含有keyword
    • 可以包含多个关键词: allintitle: “keyword1” “keyword2”
  3. 限定内容

    • 语法: intext: keyword
    • 搜索结果的内容中必定包含 keyword
  4. 限定内容的网址

    • 语法: kwyword inurl:cctv
    • 搜索的结果来自指定的网址
    • 如: “pyhon” inurl:youtube
    • 也可以用限定网站的方法: “python” site:bili.com
  5. 限定搜索图片的大小

    • 语法: keyword imagessize:3440**
  6. 限定文件格式

    • 语法: keyword filetype:png

WIREGUARD经常出现异常is jpworld accsing

- 解决办法就是更跟配置文件的权限
1
sudo chmod 600 /etc/wireguard/wg0.conf

VIM编辑器的技巧

移动光标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1. 简单的移动 h j k l 分别是h,l 左右移动,k,j 上下移动光标
2. e: 移动到当前单词的末尾
3. w: 移动到当前单词的开头
4. b: 移动到上一个单词的开头
5. 0: 移动到行首
6. $: 移动到行末
7. gg: 移动到文档开头
8. G: 移动到文档末尾
9. W: 向右移动一个以空格为分隔符的单词开头
10. E: 向右移动一个以空格为分隔符的单词结尾
11. B: 向左移动一个以空格为分隔符的单词开头
12. H: 移动到当前屏幕的顶部
13. M: 移动到当前屏幕的中部
14. L: 移动到当前屏幕的底部
# vim中单词的两种定义
- 广义的单词:两个空格之间的内容
- 狭义的单词:英文单词,标点符号和非字母字符都被认为是一个单词

# 屏幕滚动
- Ctrl + d 向下滚动半个屏幕
- Ctrl + u 向上股东半个屏幕

进入编辑模式,退出 ESC

1
2
3
4
5
6
1. i: insert 在光标前面进入插入模式
2. a: append 在光标的后面进入编辑模式
3. o: open line 在光标所在行的下面插入新行并进入编辑模式
4. I: 在行首插入进入编辑模式
5. A: 在行末进入编辑模式
6. O: 在上面插入行并进入编辑模式

删除,复制,粘帖,修改

1
2
3
4
5
6
7
8
9
10
11
12
1.   dw      delete wordu删除一个单词
2. dd 删除一行 , d0: 从光标的前一个字符删除到行首, d$: 从光标处删除到行尾
3. 3dd 删除 3 行
4. yy 复制一行
5. 3yy 复制 3 行
6. p 粘帖已经复制或删除的文本
7. x 删除一个字符 xn: 向右删除n个字符
8. r 替换当前字符
9. 3dw 删除3 个单词
10. 3yw 复制3 个单词
9. :s/<old>/<new>/g 将当前行中的<old>替换成<new>
10.:%s/<old>/<new>/g 将整个文档中的<old>替换成<new>

搜索

1
2
3
1. :/string      从当前位置向后查找 string
2. :?string 从当前位置向前查找 string
3. 搜索回撤后按 "n" 移动到下一个搜索到的字符串

替换

1
2
3
4
5
6
7
8
9
10
11
12
13
# 行内替换
:s/old/new 用字符串new 替换old, 替换当前行内的第一个
:ns/old/new 替换行内的第n个

:s/old/new/g 用字符串new 替换old,替换当前行内全部
:ns/old/new/g 替换指定的第n行

:m,ns/old/new/g 替换从第m行到n行内的所有字符串
:.,$/old/new/g 替换从当前行到末尾的所有字符串 ".":代表当前行, "$":代表最后一行

# 全文替换
:%s/old/new/g 替换文件内的所有字符串
:%s/old/new/gc 替换文件内的所有字符串,替换时需要用户确认.

查找配对的括号

1
2
3
# 用 "%" 差摘
1. 将光标移动到要查找的括号处
2. 按 "%"

保存退出

1
2
3
4
5
1.  :q              退出VIM 编辑器
2. :q! 不保存强制退出
3. :w 只保存文件不退出
4. :wq 保存文件并退出
5. :w filename 另存为filename

其他常用操作

1
2
3
4
5
6
7
1. :help            启动帮助   :q 推出帮助
2. :%d 清空文件内容
3. :set nu 显示行号
4. :set nonu 取消行号
5. :set ai 开启自动缩进
6. :set noai 关闭自动缩进
7. :start,endd 删除从start行开始到end行. 如:2,11d 删除2~11行

编辑文件

1
2
3
4
5
6
7
8
9
10
vim filename

# 同时编辑多个文件
vim file1 file2

# 多个文件之间切换
:n

# 插入文件内容
:r file file为要插入的文件名称

重复命令

1
Normal 模式下: 按 "." 即可重复上次的命令

执行外部命令

1
2
:!command       暂时离开vim去命令行执行command命令,如:!ls

插入补全

1
2
3
4
5
6
# 补全单词.这个单词是已经在本文件内出现过,输入该单词的首字母后即可使用
Ctrl + p 向上搜索,补全一个单词
Ctrl + n 向下搜索,补全一个单词

# 补全一行,这个行内容已经出现过
Ctrl+x Ctrl+l: 补全一行

vim 配置

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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
vim .vimrc

# 常规设定
yntax on " 开启语法高亮

" encoding------------------------
set encoding=utf-8 " 打开文件时编码格式
" vim会根据该设置识别文件编码
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set fileformat=unix " 设置以unix的格式保存文件"
set fileencoding=utf-8 " 在保存文件时,指定编码
set termencoding=utf-8 " 终端环境告诉vim使用编码
set ffs=unix,dos,mac " 在创建文件或写入时,这三种文件格式分别决定了行末要添加什么特殊字符,而在读入文件时,又分别决定了要从行末移去什么特殊字符。
set formatoptions+=m
set formatoptions+=B

" 主题------------------------------
set background=dark " 配色主题的色系,注意,这不是什么背景色!dark 是暗色系,light 是亮色系。
colorscheme desert " 配色主题的名称,:coloscheme 后键入<tab>可以自动补全 比较喜欢的desert,peachpuff,torte,elfload,slate

" show------------------------------
set number " 显示行号
set ruler " 显示当前光标行号和列
set wrap " 设置折行 set nowrap 为不折行
set sidescroll=1 " 默认设置=0之下,当光标到达屏幕边缘时,将自动扩展显示1/2屏幕的文本。通过使用=1设置,可以实现更加平滑的逐个字符扩展显示。
set showcmd " 在屏幕右下角显示未完成的命令
set showmode " 显示当前vim模式
set showmatc " 显示匹配的括号
set matchtime=1 " 设置showmatch的效果时间,默认500ms,现在是100ms
set cursorline " 突出显示当前行
set cursorcolumn " 突出显示当前列
set colorcolumn=80 " 设置某一列高亮

" search
set smartcase "搜索时,如果输入大写,则严格按照大小写搜索,如果小写,并设置了ignorecase,则忽略大小写
set ignorecase "搜索时忽略大小写"
set incsearc "搜索时及时匹配搜索内容,需要回车确认
set hlsearch "高亮搜索项"

" tab------------------------------
set expandtab "将<tab>符号转变为<space>空格
set smarttab "配合shiftwidth使用

" indent-----------------------------
set autoindent "换行自动缩进
set smartindent "缩进采用c语言风格
set shiftround "在一般模式下键入>>整个缩进shiftwidth的长度,<<反向操作,== 可以与上一行对齐,插入模式下C-T和C-D也可以左右启动
set shiftwidth=4 "缩进的空格数
set tabstop=4 "键入<tab>的步长
set softtabstop=4 "insert mode tab and backspace use 4 spaces

" set mark column color------------------
hi! link SignColumn LineNr
hi! link ShowMarksHLl DiffAdd
hi! link ShowMarksHLu DiffChange

" status line--------------------------
set statusline=%<%f\ %h%m%r%=%k[%{(&fenc==\"\")?&enc:&fenc}%{(&bomb?\",BOM\":\"\")}]\ %-14.(%l,%c%V%)\ %P
set laststatus=2 " 底部显示两行状态栏"

" select & complete---------------------
set selection=inclusive "选择文本事,光标所在位置也会被选中
set selectmode=key
" set selectmode=mouse,key
set scrolloff=5 "距离顶部和底部5行"
set backspace=2 "任何情况允许使用退格键删除
set mouse=a "启用鼠标"

" 代码折叠---------------------------
set foldlevelstart=99 "默认不折叠"
set foldmethod=indent "按照缩紧折叠"

" filetype---------------------------
filetype on " 开启文件类型检测
filetype plugin on " 开启插件的支持
filetype indent on " 开启文件类型相应的缩进规则

# 安装插件部分
" plug 插件的安装
call plug#begin()

" Any valid git URL is allowed---------------------------
Plug 'https://github.com/junegunn/vim-github-dashboard.git'

" Multiple Plug commands can be written in a single line using | separators
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'

" On-demand loading
Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

" Using a non-default branch
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }

" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
Plug 'fatih/vim-go', { 'tag': '*' }

" Plug options
Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }

" Plugin outside ~/.vim/plugged with post-update hook
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }

" 在vim打开文件的时候 侧边展示目前等,该插件是必装插件 如果你用vim作为ide的话
Plug 'mhinz/vim-startify'
Plug 'scrooloose/nerdtree'

" 这个插件是快速搜索文件的 也是必须安装的,比 ctrlp 速度要快
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'

" 添加一些分割线 比如你写python的时候, 格式对齐 就可以通过这个分割线来
Plug 'Yggdroot/indentLine'

" 自动格式化管理插件, 可根据不同文件类型使用不同的格式化工具
Plug 'Chiel92/vim-autoformat'

" Markdown预览
Plug 'iamcco/markdown-preview.nvim', {'do': 'cd app & yarn install'}

"YCM
Plug 'Valloric/YouCompleteMe'

"状态栏美化
Plug 'Lokaltog/vim-powerline'

"缩进线
Plug 'Yggdroot/indentLine'

"自动补全括号和引号
Plug 'jiangmiao/auto-pairs'

"自动格式化工具.安装完毕后在Normal模式下输入Autopep8或者按F8即可执行
Plug 'tell-k/vim-autopep8'

"Markdown数学公式的支持
Plug 'iamcco/mathjax-support-for-mkdp'

"自动生成代码块
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'

"使用tab补全
Plug 'vim-scripts/SuperTab'

" 可以在 vim 中自动完成
Plug 'Shougo/neocomplete.vim'
call plug#end()

1
2
3
from PIL import Image, ImageColor, ImageFilter,ImageDraw,ImageFont

import os,re

Output Content:

打开图片文件

Image.open(webpfile)

1
2
3
4
5
6
7
8
9
10
11
12
im = Image.open("test.webp")
im

# 文件是否为有效的图片文件

path = r"D:\onedrive\Code\Note\python_module\Pillow\test_1.webp"
try:
with Image.open(path) as im:
print(path, im.format, f"{im.size}@{im.mode}")
except:
pass

Output Content:

图片属性

1
2
3
4
5
6
7
8
9
im.filename     # 'test.webp'
im.size # (487, 640)
im.mode # 'RGB'
im.getbands
im.format # 'JPEG'
im.info
im.readonly
im.width
im.height

Output Content:

'test.webp'

(487, 640)

'RGB'

<bound method Image.getbands of <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=487x640 at 0x7F067F5A3150>>

'JPEG'

{'jfif': 257, 'jfif_version': (1, 1), 'jfif_unit': 0, 'jfif_density': (1, 1)}

0

487

640

图片尺寸

1
2
3
4
5
6
7
8
9
# im.size返回的是一个元组,包含尺寸的width,height
im.size
w,h=im.size
w,h

im.width,im.height

# 图片占用存储空间尺寸,单位bit
os.path.getsize('test.webp')

Output Content:

(487, 640)

(487, 640)

(487, 640)

113104

RGB通道的图片

分离通道

1
2
3
4
5
6
7
8
9
10
11
12
13
# img.split() 返回三元素的元组,各元素就是三个通道的单通道图片
# 分离颜色通道,产生三个 Image对象

webpfile = "test.webp"

img = Image.open(webpfile)
r, g, b = img.split()
r, g, b

print(type(im),type(webpfile))

a,b,c = Image.Image.split(Image.open(webpfile))
a,b,c

Output Content:

(<PIL.Image.Image image mode=L size=487x640>,
 <PIL.Image.Image image mode=L size=487x640>,
 <PIL.Image.Image image mode=L size=487x640>)

<class 'PIL.JpegImagePlugin.JpegImageFile'> <class 'str'>

(<PIL.Image.Image image mode=L size=487x640>,
 <PIL.Image.Image image mode=L size=487x640>,
 <PIL.Image.Image image mode=L size=487x640>)

保存单通道的图片

1
2
3
4
Output Content:
img = Image.open(imgfile)

a,b,c = Image.Image.split(img)

Output Content:

1
2
3
4
5
6
7
8
9
10
11
12
13
# rgb通道分离后, 返回一个元组,分别代表r,g,b  
# 单通道的图片的像素尺寸不变,但是占用的存储空间变小50%以上

imgfile = "test.webp"
img = Image.open(imgfile)
a, b, c = Image.Image.split(img)

a
b
c

a.save("testwebp_chanl_r.webp")

Output Content:

缩放图片尺寸

Image.thumbnail(size, resample=None)

  1. size: 缩略图尺寸,是一个二元元组,形如(width, height)w,h都不应超过源图片尺寸。等比缩放图片。
  2. resample: 样例率算法。可以是下列之一,分别对应不同的样例率算法

resize() 和 thumbnail() 方法的区别

  1. resize()方法可以缩小也可以放大,而thumbnail()方法只能缩小;
  2. resize()方法不会改变原来对象的大小,只会返回一个新的Image对象
  3. thumbnail()方法会直接改变对象的大小,返回值为none;
  4. resize()方法中的size参数直接规定了修改后的大小;
  5. thumbnail()方法按比例缩小,size参数只规定修改后size的最大值。
1
2
3
4
5
6
7
8
9
10
11
12
im =Image.open('test.webp')
w,h = im.size
w,h

im.thumbnail((400,600))
im,im.size

im.thumbnail((200,600),Image.LANCZOS)
im,im.size

im

Output Content:

(487, 640)

(<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=400x526>, (400, 526))

(<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=200x263>, (200, 263))

合并通道

  • Image.merge(mode, bands)
  • 参数说明如下:-
  • mode:指定输出图片的模式
  • bands:参数类型为元组或者列表序列,其元素值是组成图像的颜色通道,比如 RGB 分别代表三种颜色通道,可以表示为 (r,g,b)。
  • 注意,该函数会返回一个新的 Image 对象。

单张图片的通道合成

1
2
3
4
5
6
7
8
9
10
11
12
13
img = Image.open('test.webp')
img
a = img.split()
r, g, b = a

# 返回原图
Image.merge("RGB", a)

# 更改通道顺序 倒序
Image.merge("RGB", a[::-1])

# 更改通道顺序
Image.merge("RGB", (r,b,g))

Output Content:

两张图片的通道合成

要求两张图片的模式、图像大小必须要保持一致,否则不能合并

1
2
3
4
5
6
7
8
9
10
11
img = Image.open("test.webp")
img.thumbnail((400, 800))

img1 = Image.open("test2.webp")
img2 = img1.resize(img.size)
r, g, b = img.split()
x, y, z = img2.split()

Image.merge("RGB", ( r, g,z))

print(img.size, img2.size)

Output Content:

(400, 526) (400, 526)

blend() 混合图片

  • blend() 方法来混合 RGBA 模式的图片(PNG 格式),函数的语法格式如下:
    • Image.blend(image1,image2, alpha)
    • 参数说明如下:
      • image1,image2:表示两个 Image 对象。
      • alpha:表示透明度,取值范围为 0 到 1.
        • 当取值为 0 时,输出图像相当于 image1 的拷贝,
        • 而取值为 1 时,则是 image2 的拷贝,
        • 只有当取值为 0.5 时,才为两个图像的中合。因此改值的大小决定了两个图像的混合程度。
  • 与 RGB 模式相比,RGBA 在 RGB 的基础上增加了透明度,通过 Alpha 取值来决定两个图像的混合程度。
1
2
3
4
5
6
im1 = Image.open("test.webp")
im2 = Image.open("test2.webp")
im3 = im2.resize(im1.size)

Image.blend(im1, im3, 0.3)
Image.blend(im3, im1, 0.3)

Output Content:

composite 混合图片

通过使用透明蒙版混合图像来创建合成图像

Image.composite(im2, im1, im2)

参数

  1. im1 – 第一张图片。。
  2. im2 – 第二张图片。必须是RGBA
1
2
3
4
5
6
7
8
9
10
11
# 打开两张图片
im1 = Image.open("test2.webp")

im2 = Image.open("test.webp")
im2 = im2.convert("RGBA")

im3 = Image.open('test.webp_no_bg.webp')

Image.composite(im2,im1,im2)

Image.composite(im3,im1,im3)

Output Content:

更改图片尺寸

  • 可以放大可以缩小
  • resize()函数讲解
  • 函数img.resize((width, height),Image.ANTIALIAS)
    • 第二个参数:
      Image.NEAREST :低质量
      Image.BILINEAR:双线性
      Image.BICUBIC :三次样条插值
      Image.ANTIALIAS:高质量

按指定的尺寸,不保持纵横比

1
2
out = im.resize((300, 300))
out

Output Content:

1
2
3
4
5
im=Image.open("test.webp")
w, h = im.size

out = im.resize((w //2, h // 2))
out

Output Content:

保持比例

1
2
3
im.thumbnail((200, 800))
im.size
im

Output Content:

(200, 263)

插值

第二个参数:

  • Image.NEAREST :低质量
  • Image.BILINEAR:双线性
  • Image.BICUBIC :三次样条插值
  • Image.LANCZOS:高质量
1
2
3
4
5
6
# 低质量
im=Image.open("test.webp")
im.size
im.thumbnail((300, 800), Image.NEAREST)
im.size
im

Output Content:

(487, 640)

(300, 394)
1
2
3
4
5
# 双线性
im=Image.open("test.webp")
im.thumbnail((300, 800), Image.BILINEAR)
im.size
im

Output Content:

(300, 394)
1
2
3
4
5
# 三次样条插值
im=Image.open("test.webp")
im.thumbnail((300, 800), Image.BICUBIC)
im.size
im

Output Content:

(300, 394)
1
2
3
4
5
# 高质量
im=Image.open("test.webp")
im.thumbnail((300, 800), Image.LANCZOS)
im.size
im

Output Content:

(300, 394)

图像的复制

1
2
3
# 复制图像
a = im.copy()
a

Output Content:

1
2
out = im.rotate(45)
out

Output Content:

expand=True

1
im.rotate(45, expand=True)

Output Content:

图像的镜面翻转

  • Image.FLIP_LEFT_RIGHT 水平翻转
  • Image.FLIP_TOP_BOTTOM,垂直翻转
1
2
3
4
im = Image.open("test.webp")
im.thumbnail((300, 800), Image.LANCZOS)
im.transpose(Image.FLIP_LEFT_RIGHT)
im.transpose(Image.FLIP_TOP_BOTTOM)

Output Content:

获取rgb值及alpha

1
2
3
4
print(ImageColor.getcolor('red', 'RGBA'))

# 也可以只以RBG的方式查看
print(ImageColor.getcolor('black', 'RGB'))

Output Content:

(255, 0, 0, 255)
(0, 0, 0)

新建图像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 通常使用RGB模式就可以了
a = Image.new('RGB', (100, 100), 'red')
a

# 也可以用RGBA模式,还有其他模式查文档吧
b = Image.new('RGB', (200, 100), 'red')
b
# 十六进制颜色
c = Image.new('RGBA', (200, 100), '#FF00b0')
c
# 传入元组形式的RGBA值或者RGB值
# 在RGB模式下,第四个参数失效,默认255,在RGBA模式下,也可只传入前三个值,A值默认255
d = Image.new('RGBA', (200, 100), (255, 255, 0, 200))
d

Output Content:

裁剪图片

1
2
im=Image.open("test.webp")
im.crop((500, 700, 1000, 1000))

Output Content:

图片粘贴

1
2
3
a = im.crop((700, 700, 1000, 1000))
im.paste(a, (0, 0))
im

Output Content:

图像过滤

1
2
3
4
im = Image.open("test.webp")
im.thumbnail((200,1000),Image.LANCZOS)
# 高斯模糊
im.filter(ImageFilter.GaussianBlur)

Output Content:

1
2
# 普通模糊
im.filter(ImageFilter.BLUR)

Output Content:

1
2
# 边缘增强
im.filter(ImageFilter.EDGE_ENHANCE)

Output Content:

1
2
# 找到边缘
im.filter(ImageFilter.FIND_EDGES)

Output Content:

1
2
# 浮雕
im.filter(ImageFilter.EMBOSS)

Output Content:

1
2
# 轮廓
im.filter(ImageFilter.CONTOUR)

Output Content:

1
2
# 锐化
im.filter(ImageFilter.SHARPEN)

Output Content:

1
2
# 平滑
im.filter(ImageFilter.SMOOTH)

Output Content:

1
2
# 细节
im.filter(ImageFilter.DETAIL)

Output Content:

1
2
3
4
5
from PIL import Image, ImageDraw, ImageFont

# 产生一个有4个颜色channels的空白图像
b = Image.new('RGBA', (200, 100), 'BLUE')
b

Output Content:

1
2
3
4
5
6
7
# 在blank_image 图像上绘图
c = ImageDraw.Draw(b)
c

# 画一个矩形
c.rectangle((50,50,100,90),outline='red',fill='blue')
b

Output Content:

<PIL.ImageDraw.ImageDraw at 0x7f067c1bac10>

图像转换

1
2
3
4
5
6
7
8
9
10
# convert()是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式
# 1 ------------------(1位像素,黑白,每字节一个像素存储)
# L ------------------(8位像素,黑白)
# P ------------------(8位像素,使用调色板映射到任何其他模式)
# RGB------------------(3x8位像素,真彩色)
# RGBA------------------(4x8位像素,带透明度掩模的真彩色)
# CMYK--------------------(4x8位像素,分色)
# YCbCr--------------------(3x8位像素,彩色视频格式)
# I-----------------------(32位有符号整数像素)
# F------------------------(32位浮点像素)

Output Content:

1
2
3
4
5
6
7
8
# 将彩色转换成灰阶
im = Image.open("test.webp")
im.thumbnail((200, 1000), Image.LANCZOS)
a = im.convert('L')
a
s=im.convert('RGBA')
s.getbands
s

Output Content:

<bound method Image.getbands of <PIL.Image.Image image mode=RGBA size=200x263 at 0x7F067F5C91D0>>
1
2
3
4
5
6
7
8
Image.open('test.webp').convert("RGB").save("test.webp","WEBP")
img3=Image.open("test.webp")
img3.size
img3

import os
os.path.getsize("test.webp")
os.path.getsize("test.webp")

Output Content:

(487, 640)
113104

66374
1
2
3
4
5
6
7
im1=Image.open("test.webp")
im1.size
w,h=im1.size
im2=im1.resize((w*3,h*3))
im2.size
im1
im2.save("test_1.webp")

Output Content:

(487, 640)

(1461, 1920)

更改图像尺寸后另存为webp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

from PIL import Image, ImageColor, ImageFilter
import os,re

path=r'/home/xiaoyx/图片/'
files=[i for i in os.listdir(path) if re.search('\.webp$',i)]

for i in files:
file=os.path.join(path,i)
sz=os.path.getsize(file)/1000

pic=Image.open(file)
print(f'{i}的大小是:{sz} kb,照片的尺寸大小是:{pic.size}')
# pic.thumbnail((800, 800), Image.LANCZOS)
pic=pic.resize((1800, 1800), Image.LANCZOS)
newname=os.path.join(path,i.split('.')[0])
pic.save(f'{newname}.webp','WEBP')
pic.close()

Output Content:

绘制文字

1
2
3
4
5
6
7
icon = Image.new('RGBA', (50, 35),(0,0,0,180) )
icon
draw = ImageDraw.Draw(icon)
font=ImageFont.truetype(font= "malayalam.ttf" ,size=28)
draw.text((0,0),'888',fill=(255,255,255,255),font=font)
icon.save('textpictest.webp')
icon

Output Content:

1
2
3
4
5
6
def creat_icon(text):
icon = Image.new('RGBA', (75, 45),(0,0,0,180) )
draw = ImageDraw.Draw(icon)
font=ImageFont.truetype(font= "malayalam.ttf" ,size=32)
draw.text((0,0),text,fill=(255,255,255,255),font=font)
return icon

Output Content:

1
2
3
4
5
6
7
8
9
10
11
# 创建ICON
icon=creat_icon('Paste')
icon

# 打开图片
im2=Image.open('test.webp')
im2
im2.paste(icon,(0,0),icon)

# 贴上ICON后
im2

Output Content:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 贴图片 
# im1=Image.open('test.webp')
# # im1
# # im1.size

im2 =Image.open('test2.webp')

# im2.paste(im1)
# im2

import numpy as np
im3 = Image.open('test3.webp_no_bg.webp')

size = (np.array(im2.size) - np.array(im3.size))/2
pos = tuple([int(i) for i in tuple(size)])

im2.paste(im3,pos,im3)
im2

im2 =Image.open('test2.webp')
Image.composite(im3,im2,im3)

Output Content:

抠图

removebg模块

– 好像有每天不超过50张的限制

1
2
3
4
5
6
7
8
9
10
11
12
13
# 此模块测试成功
import os
path = '%s/picture'%os.getcwd()
# path

file="test3.webp"
Image.open("test3.webp")
from removebg import RemoveBg
rmbg = RemoveBg("HbFjA4LMQXLTZCnG6TzWuH7R", "error.log") # 引号内是获取的API
rmbg.remove_background_from_img_file(file)

rmbg.remove_background_from_img_file("test.webp")

Output Content:

1
2

Image.open("test3.webp_no_bg.webp")

Output Content:

安装jupyter notebook

  1. 先安装好python3
  2. 安装jupyter notebook ,命令行窗口中 pip3 install jupyter
  3. 启动jupyter notebookr
    1. 打开CMD命令窗口
    2. 输入: jupyter notebook

修改主题

  1. 安装主题
    1. pip install jupyterthemes
    2. pip install jupyterlab_legos_ui
  2. 查看已经安装的主题
    1. !jt -l # 列出已经安装的主题
    2. 结果:[chesterish,grade3,gruvboxd,gruvboxl,monokai,oceans16,onedork,solarizedd,solarizedl]
  3. 切换主题并设置特性
    1. jt -t gruvboxd # -t 后面的是要切换的新主题名称
    2. jt的参数表
  4. 重置主题至默认主题
    1. jt -r
参数1 功能 参数2 功能
-f 代码字体 -fs 代码字号
-nf notebook字体 -nfs notebook字号
-tf Text/MD Cell字体 -tfs Text/MD Cell字号
-dfs pandas DF字号 -ofs Output Area 字号
-cellw cell的宽度 -dfonts 强制默认字体
-lineh 行高 -l 列出已经安装的主题
-r 恢复默认主题 -t *** 切换主题***:新主题名称
-T 显示工具栏 -N 显示名称和徽标

jt函数的使用

1
2
%%cmd
jt -h
Task exception was never retrieved
future: <Task finished name='Task-12' coro=<ScriptMagics.shebang.`<locals>`._handle_stream() done, defined at C:\Python310\lib\site-packages\IPython\core\magics\script.py:211> exception=UnicodeDecodeError('utf-8', b'Microsoft Windows [\xb0\xe6\xb1\xbe 10.0.22000.556]\r\n', 19, 20, 'invalid start byte')>
Traceback (most recent call last):
  File "C:\Python310\lib\site-packages\IPython\core\magics\script.py", line 213, in _handle_stream
    line = (await stream.readline()).decode("utf8")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 19: invalid start byte

查看已经安装的主题

1
!jt - l
Available Themes:
   chesterish
   grade3
   gruvboxd
   gruvboxl
   monokai
   oceans16
   onedork
   solarizedd
   solarizedl

切换新主题

1
!jt - t grade3 - cellw 91 % -lineh 130 - f source - fs 115 - tf ptserif - tfs 13 - nf ptsans - nfs 9 - ofs 9 - TN
jt -t 参数 功能描述
grade3 切换新主题grade3
-cellw 100% 调整单元格的宽度,占屏幕的比例
-lineh 120 单元格的高度
-f fira -fs 115 设置代码字体为Fira字体大小为11.5pt
-tf merriserif -tfs 10 设置makedown字体和大小
-nf ptsans -nfs 13 设置notebook(界面)字体、字体大小,实际就是菜单栏字体
-m 200 页面上的容器边距
-cursc r -cursw 5 设置光标的颜色为红色,宽度为5
-of *** -ofs 14 输出区的字形和大小(14)

代码的字体(等宽字体):-f 参数

  • 参数列表

anka
anonymous
aurulent
bitstream
bpmono
code
consolamono
cousine
dejavu
droidmono
fira
firacode
generic
hack
hasklig
inconsolata
inputmono
iosevka
liberation
meslo
office
oxygen
roboto
saxmono
source
sourcemed
ptmono
ubuntu

Notebook 、Text/MD 单元格的字体(无衬线字体):-nf/-tf 参数

  • 参数列表

opensans
droidsans
exosans
latosans
ptsans
robotosans
sourcesans

Notebook 、Text/MD 单元格的字体(衬线字体):-nf/-tf 参数

  • 参数列表

loraserif
ptserif
georgiaserif
cardoserif
crimsonserif
ebserif
merriserif
neutonserif
goudyserif

安装插件

  1. 安装nbextensions
  2. 了解插件包的功能;
  3. 大部分插件只需要在nbextensions 界面勾选即可,部分需要pip 安装
1
2
3
4
# !pip install jupyter_contrib_nbextensions
# !jupyter contrib nbextension install - -user
# !pip install jupyter_nbextensions_configurator
# !jupyter nbextension enable

<b>limit_output extension: Maximum message size of 10000 exceeded with 10114 characters</b>

1
2
3
4
5
6
# 安装autopep8
# !pip3 install autopep8

# # 安装魔法工具包
# !pip install ipywidgets
# !jupyter nbextension enable--py widgetsnbextension
插件 功能
0 Autopep8 美化代码
1 Hinterland 代码提示和补全
2 ExecuteTime 运行时间和耗时
3 variable inspector 变量监视
4 zenmode 不显示菜单栏
5 code folding 代码折叠
6 Collapsible headings 标题折叠
7 Skip-traceback 跳过报错的过程
8 Snippets 插入常用代码片
9 Slideshow 幻灯片放映
10 Jupyter Widgets 魔法工具包
11 Table of Contents 生成目录

输出其他类型代码

  1. 输入 %lsmagic 可以获得Magic操作符的列表
  2. 输入 %cmdname? 可以查看命令信息
  3. 输出HTML: %%html
  4. 输出cmd:%%cmd
  5. 输出LATEX:%%latex
  6. 嵌入链接:
    1. from IPython.display import IFrame
    2. IFrame(‘url’, width=800, height=450)
  7. 嵌入PDF:
    1. from IPython.display import IFrame
    2. IFrame(‘.\DR153test.pdf’, width=800, height=800)
  8. 运行python文件 .py
    1. %run xxx.py 按Ctrl+Enter后执行
1
%lsmagic

Output:

Available line magics:
%alias  %alias_magic  %autoawait  %autocall  %automagic  %autosave  %bookmark  %cd  %clear  %cls  %colors  %conda  %config  %connect_info  %copy  %ddir  %debug  %dhist  %dirs  %doctest_mode  %echo  %ed  %edit  %env  %gui  %hist  %history  %killbgscripts  %ldir  %less  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %ls  %lsmagic  %macro  %magic  %matplotlib  %mkdir  %more  %notebook  %page  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %pip  %popd  %pprint  %precision  %prun  %psearch  %psource  %pushd  %pwd  %pycat  %pylab  %qtconsole  %quickref  %recall  %rehashx  %reload_ext  %ren  %rep  %rerun  %reset  %reset_selective  %rmdir  %run  %save  %sc  %set_env  %store  %sx  %system  %tb  %time  %timeit  %unalias  %unload_ext  %who  %who_ls  %whos  %xdel  %xmode

Available cell magics:
%%!  %%HTML  %%SVG  %%bash  %%capture  %%cmd  %%debug  %%file  %%html  %%javascript  %%js  %%latex  %%markdown  %%perl  %%prun  %%pypy  %%python  %%python2  %%python3  %%ruby  %%script  %%sh  %%svg  %%sx  %%system  %%time  %%timeit  %%writefile

Automagic is ON, % prefix IS NOT needed for line magics.
1
2
# 查看用法
%cd?
1
2
3
%%cmd
cd d:\
dir
Task exception was never retrieved
future: <Task finished name='Task-7' coro=<ScriptMagics.shebang.`<locals>`._handle_stream() done, defined at C:\Python310\lib\site-packages\IPython\core\magics\script.py:211> exception=UnicodeDecodeError('utf-8', b'Microsoft Windows [\xb0\xe6\xb1\xbe 10.0.22000.556]\r\n', 19, 20, 'invalid start byte')>
Traceback (most recent call last):
  File "C:\Python310\lib\site-packages\IPython\core\magics\script.py", line 213, in _handle_stream
    line = (await stream.readline()).decode("utf8")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 19: invalid start byte
1
2
# 等同于上面的简化代码
!dir d: \

嵌入链接

1
2
3
4
5
from IPython.display import IFrame

IFrame('https://pandas.pydata.org/pandas-docs/stable/reference/groupby.html',
width=800,
height=800)

Output:

显示图片

1
2
3
4
import os
from IPython.display import Image, IFrame

Image('./1.webp', width='25%')

Output:

1
2
3
4
import os
from IPython.display import Image, IFrame

Image('./1.webp', retina=True)

Output:

显示pdf

1
2
3
4
5
import os
from IPython.display import Image, IFrame


IFrame('./2.pdf', width='80%', height='800px')

Output:

更新软件包

1
!pip3 install --upgrade pip

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
#_python3@linux _#
#_date:2023-12-17_#
#_转换博文中插入图片的格式webp to webp,修改插入语句和图片_#
#_encoding = utf-8_#

import os
import re
from PIL import Image


def change_to_webp():
"""
将 source\_posts目录下的所有图片格式(webp/webp)转换成webp。
并将对应的md文件中插入图片的语句相应的更改成webp.如:<img src="./1.webp" /> ==>>> <img src="./1.webp" />
"""
fold = r"/run/media/xiaoyx/Data/BLOG/yxhsiao/source/_posts"
imgs = [
os.path.join(p, j) for p, d, f in os.walk(fold) for j in f
if re.search('\.webp$|\.webp$', j)
]
for img in imgs:
im = Image.open(img).convert('RGB')
im.save(re.sub('webp|webp', 'webp', img))
os.remove(img)

files = [
os.path.join(fold, i) for i in os.listdir(fold)
if re.search('\.md$', i)
]
for file in files:
with open(file, 'r',
encoding='utf-8') as f, open(f'{file}.bak',
'w',
encoding='utf-8') as newfile:
for line in f.readlines():
newfile.write(re.sub('webp|webp', 'webp', line))
os.remove(file)
os.rename(f'{file}.bak', file)


if __name__ == "__main__":
change_to_webp()