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


Answers:


5

我也想获得这些Skype头像,因此我使用了whitequark的答案来制作一个执行该操作的bash脚本。这里是:

#!/ bin / bash

如果[\($#-lt 1 \)];
然后
  回显“用法:$ 0文件夹”;
  回显“文件夹的格式为/home/username/.Skype/username”;
  出口;
fi;

因为我在`ls $ 1`中;
做
  如果[-f $ 1 / $ i];
  然后
    #echo“ i:$ i”;
    $ 1 / $ i | filedump =`hexdump -v -e'“” 1/1“%02x”“”'$ 1 / $ i | sed -e's / ffd8ffe0 / \ nffd8ffe0 / g'`;
    nocc =`echo“ $ filedump” | wc -l`; #出现\ n字符。表示我们的单词有nocc-1出现
    #echo“ nocc:$ nocc”;
    如果[“ $ nocc” -ge 2];
    然后
      k = 0;
      old_IFS = $ IFS; #field分隔符
      IFS = $'\ n';
      偏移量= 0;
      对于$ filedump中的j;
      做
        w =`echo $ j | wc -m`; #实际为lettercount + 1
        w = $ [w-1];
        offset = $ [offset + w];
        #echo“ offset:$ offset”;
        filename1 =“ $ {i} _ $ {k} _notclean.jpg”;
        filename2 =“ $ {i} _ $ {k} .jpg”;
        dd ibs = 1 if = $ 1 / $ i of = $ filename1 skip =`echo“ $ offset / 2” | bc` status = noxfer;
        如果[`du $ filename1 | 切-f1` -gt 0];
        然后
          转换$ filename1 $ filename2; #convert实际上仅用于删除图像后的数据
        fi;
        rm $ filename1;
        k = $ [k + 1];
      完成
      IFS = $ old_IFS;
    fi;
  fi;
做完了

这并不总是有效,没有找到一些化身,并且提取了一些损坏的图像。请参阅我的答案以获得更清洁的解决方案。
纪尧姆·布鲁内利(Juillaume Brunerie)2012年

8

这是一个更干净的脚本,它从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

4

这个Skype论坛主题是关于化身的:http : //forum.skype.com/index.php ? showtopic= 99471

  • 首先,他们讨论一些命令,这些命令使您可以通过Skype缓存使用其公共接口保存化身,但显然在Linux上不起作用。我不知道他们是否已经修复了该接口,这不是您的问题。
  • 其次,一位Skype开发人员说,所有图像均以JPEG格式存储,并以hex(JFIF)提供标题。使用该for i in *; do echo $i; hd $i | grep 'ff d8 ff e0'; done命令对所有Skype文件进行十六进制转储后,发现.Skype / userNNN.dbb文件中此标头多次出现,其中NNN是某个数字。该文件具有某些绝对未记录的专有格式,并且可能保留有关用户的所有缓存信息。您可以通过扫描标题来提取自己的化身,然后将所有内容复制到文件结尾,再复制到其他文件。所有图像查看器都将在图像本身之后跳过任何数据(RARJPG所基于的技术),如果要从其中删除垃圾,则可以“修改”它而不用例如imagemagick和command进行修改convert file.jpg file_clean.jpg。ImageMagick的行为与描述的查看器相同:它读取图像,跳过其后的所有内容,然后仅写入图像本身。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.