Last active
April 11, 2019 02:24
-
-
Save fwolf/dc492fbf9254c581c02b8ba52a940373 to your computer and use it in GitHub Desktop.
针对 gb688.cn ,按高度适应,左右分别截图,然后左右合并。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env bash | |
mkdir left | |
mkdir right | |
mkdir pages |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env php | |
<?php | |
/** | |
* 针对 gb688.cn ,按高度适应,左右分别截图,然后左右合并。 | |
* | |
* 图片准备: | |
* - 安装 scrot 截图软件,xmag 屏幕测量软件(在 x1-apps 包中),Gimp 编辑软件。 | |
* - scrot 需要 0.9.1 以上版本,https://tracker.debian.org/pkg/scrot 。 | |
* - 安装 imagemagick 用于图像处理。 | |
* - 打开 PDF 浏览,全屏,按高度适应,左右滚动到最左。 | |
* - 使用 `xmag -mag 10` 测量出,需截屏区域的左上角、右下角坐标。 | |
* - 计算出截屏区域宽度和高度。 | |
* - 在 .xbindkeysrc 中设置截取区域的快捷键,并运行。 | |
* - 截取所有页面左半部分,存于 left 目录,可根据结果调整截取参数。 | |
* - 照此测量、截取右边部分,存于 right 目录。两次截取的起始 y 坐标和高度应该相同。 | |
* - 截图应按前后顺序来,左右边文件保持数量、位置一致。目录内别放其他无关文件。 | |
* - 用 Gimp 将左边白处油漆桶填充颜色放下面,右边设置透明度 70 放上面,移动找出左右完美重合位置。 | |
* - 得到右边图图层 x 坐标,也就是说,将左边图只保留 x 宽度,就可与右边图左右拼合成完整图。 | |
* | |
* f16 Zoom to 218% | |
* left page: 21,57 to 1065,1987 =* scrot -a 22,57,1043,1841 | |
* right page: 0,57 to 1057,1898 = scrot -a 00,57,1057,1841 | |
* offset x: 245 | |
* f13/fo Zoom to 218% | |
* left page: 21,57 to 1066,1898 | |
* right page: 0,57 to 1058,1898 | |
* offset x: 245 | |
* 为便于处理,截图参数设置为同 f16 了。 | |
* | |
* Usefull command: | |
* width: identify -format '%w' l.png | |
* height: identify -format '%h' l.png | |
* convert -crop 245x10000000+0+0 l.png ll.png | |
* convert ll.png r.png +append p1.png | |
* | |
* @copyright Copyright 2019 Fwolf <[email protected]> | |
* @license https://opensource.org/licenses/MIT MIT | |
*/ | |
//// Check | |
if (5 > $argc) { | |
$printUsage = function () { | |
$baseName = basename(__FILE__); | |
echo <<<EOF | |
Usage: $baseName LEFT RIGHT RESULT OFFSET | |
Parameters: | |
-LEFT Directory which left half screenshot in | |
-RIGHT Directory which right half screenshot in | |
-RESULT Directory to store merged pictures | |
-OFFSET Left pic need crop after this width and append by right | |
EOF; | |
}; | |
$printUsage(); | |
exit(-1); | |
} | |
$leftDirRaw = $argv[1]; | |
$leftDir = realpath($leftDirRaw); | |
if (!is_readable($leftDir)) { | |
echo "Left dir '{$leftDir}' not exists or readable." . PHP_EOL; | |
exit(-2); | |
} | |
$leftDir .= '/'; | |
$rightDirRaw = $argv[2]; | |
$rightDir = realpath($rightDirRaw); | |
if (!is_readable($rightDir)) { | |
echo "Right dir '{$rightDir}' not exists or readable." . PHP_EOL; | |
exit(-2); | |
} | |
$rightDir .= '/'; | |
$destDirRaw = $argv[3]; | |
$destDir = realpath($destDirRaw); | |
if (!is_writable($destDir)) { | |
echo "Dest dir '{$destDir}' not exists or writeable." . PHP_EOL; | |
exit(-2); | |
} | |
$destDir .= '/'; | |
$offset = $argv[4]; | |
//// Main body | |
$leftFiles = scandir($leftDir); | |
array_shift($leftFiles); | |
array_shift($leftFiles); | |
$rightFiles = scandir($rightDir); | |
array_shift($rightFiles); | |
array_shift($rightFiles); | |
$croppedLeft = tempnam(sys_get_temp_dir(), 'merge-gb688-'); | |
$pageNumber = 0; | |
while (!empty($leftFiles)) { | |
$leftFile = $leftDir . array_shift($leftFiles); | |
$rightFile = $rightDir . array_shift($rightFiles); | |
$pageNumber ++; | |
// Crop | |
$cmd = "convert -crop {$offset}x10000000+0+0 " . | |
"\"{$leftFile}\" \"{$croppedLeft}\""; | |
exec($cmd); | |
// Merge | |
$destFile = $destDir . 'page-' . sprintf('%03d', $pageNumber) . '.png'; | |
$cmd = "convert \"{$croppedLeft}\" \"{$rightFile}\" +append " . | |
"\"{$destFile}\""; | |
exec($cmd); | |
} | |
echo "Done, total {$pageNumber} pages." . PHP_EOL; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment