Skype 在 Linux 中将我的联系人的头像保存在哪里?

Skype 在 Linux 中将我的联系人的头像保存在哪里?

我在 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 的行为与描述的查看器相同:它读取图像,跳过其后的所有内容,然后只写入图像本身。

相关内容