我在 Linux 上使用 Skype。
我可以在哪里找到 Skype 缓存的我的联系人的头像图像?
答案1
我也想获得这些 Skype 头像,因此我使用 whitequark 的答案来制作一个可以完成此操作的小 bash 脚本。它如下:
/bin/bash #!/bin/bash 如果 [ \( $# -lt 1 \) ]; 然后 echo "用途:$0 文件夹"; echo "其中文件夹的形式为/home/username/.Skype/username"; 出口; 科幻; 对于我在 `ls $1` 中; 做 如果[-f $1/$i]; 然后 #echo "i:$i"; filedump=`hexdump -v -e'"" 1/1"%02x" ""'$1/$i | sed -e's/ffd8ffe0/\nffd8ffe0/g'`; nocc=`echo "$filedump" | wc -l`; # \n 字符的出现次数。表示我们的单词没有出现过 cc-1 次 #echo "nocc:$nocc"; 如果 [ “$nocc” -ge 2 ]; 然后 k=0; old_IFS=$IFS;#字段分隔符 IFS=$'\n'; 偏移量=0; 对于 $filedump 中的 j; 做 w=`echo $j | wc -m`; # 实际上给出的是 lettercount+1 w=$[w-1]; 偏移量=$[偏移量+w]; #echo "偏移量:$offset"; 文件名1="${i}_${k}_notclean.jpg"; 文件名2="${i}_${k}.jpg"; dd ibs=1 if=$1/$i of=$filename1 skip=`echo "$offset/2" | bc` status=noxfer; 如果 [ `du $filename1 | cut -f1` -gt 0 ]; 然后 convert $filename1 $filename2;#convert其实只是用来去除图片后面的数据 科幻; rm $文件名1; k=$[k+1]; 完毕; IFS=$old_IFS; 科幻; 科幻; 完毕
答案2
这是一个更简洁的脚本,它从 main.db 文件中提取低清晰度和高清晰度头像,并将它们保存到以相应的 Skype 用户名命名的文件中。
您将需要 sqlite3 和 xxd 来运行此脚本。
main.db 数据库的内容相当容易理解,只要稍加想象,就可以从中提取更多内容。
#!/bin/bash
if (( $# != 1 ))
then
echo "Usage: $0 folder"
echo "Where folder is of the form /home/username/.Skype/username"
exit 1
fi
# Magic string used at the beginning of JPEG files
magic=FFD8FFE0
# We read main.db and extract the Skype name, the avatar image and the
# attachments (which often contain a high-def version of the avatar image)
sqlite3 "$1/main.db" "select skypename,hex(avatar_image),hex(profile_attachments) from Contacts;" |\
while read line
do
IFS='|'
# We convert the line into an array
a=($line)
if [[ -n ${a[1]} ]] # There is an avatar_image
then
# We strip everything before the magic string, convert it back to binary, and save it to a file
echo $magic${a[1]#*$magic} | xxd -r -p > ${a[0]}_small.jpg
fi
if [[ -n ${a[2]} ]] # There is a profile_attachments
then
# Same as above
echo $magic${a[2]#*$magic} | xxd -r -p > ${a[0]}.jpg
fi
done
答案3
此 Skype 论坛主题是关于头像的:http://forum.skype.com/index.php?showtopic=99471。
- 首先,他们讨论了一些命令,这些命令允许您通过其公共接口从 Skype 缓存中保存头像,但显然它在 Linux 上不起作用。我不知道他们是否已经修复了该接口,而这不是您的问题所在。
- 其次,一位 Skype 开发人员表示,所有图像都以 JPEG 格式存储,并提供十六进制 (
JFIF
) 的标头。使用命令 grep 所有 Skype 文件的 hexdumpfor i in *; do echo $i; hd $i | grep 'ff d8 ff e0'; done
发现,在 .Skype/userNNN.dbb 文件中,此标头多次出现,其中 NNN 是某个数字。这些文件具有绝对未记录的专有格式,可能保留了有关用户的所有缓存信息;您可以通过扫描标头来提取头像本身,然后将文件末尾的所有内容复制到其他文件。所有图像查看器都会跳过图像本身之后的任何数据(RARJPG 基于此技术),如果您想从图像中删除垃圾,您可以“修改”它而不进行修改,例如使用 imagemagick 和命令convert file.jpg file_clean.jpg
。ImageMagick 的行为与描述的查看器相同:它读取图像,跳过其后的所有内容,然后只写入图像本身。