На Linux Вы могли использовать inotifywait для автоматического выполнения команды каждый раз, когда содержание файла изменяется.
Редактирование: следующая команда фиксирует file.txt, как только она сохраняется:
inotifywait -q -m -e CLOSE_WRITE --format="git commit -m 'autocommit on change' %w" file.txt | sh
Я просматривал документацию Imagick
некоторое время и пробовал кое-что ... Но мне тоже не удалось сделать то, что вы хотите - итак, нас как минимум двое не могут найти чистый путь ^^
В любом случае, единственный способ удалить рамку из анимированного изображения в формате GIF - это создать новый, Я нашел единственный способ «удалить кадр»:
$new_image = new Imagick();
$i = 1;
foreach ($image as $frame) {
if ($i===1 || $i===3) {
// 3 frames ; we keep the first and third one
// ie, remove the second one
$new_image->addImage($frame->getImage());
}
$i++;
}
Итак:
И, в конце концов, чтобы вывести изображение в браузер:
// To directly output to the browser
header('Content-Type: image/gif');
echo $new_image->getImagesBlob();
Или, чтобы записать его в файл:
// To write the new image to a file
// Must use writeImages, and not writeImage (multi-frames ! )
$new_image->writeImages(dirname(__FILE__) . '/animated-gif-output.gif', true);
Каждый из этих выходов содержит только первый и третий кадры; итак, работает ... Я нашел единственный способ «удалить кадр»:
$new_image = new Imagick();
$i = 1;
foreach ($image as $frame) {
if ($i===1 || $i===3) {
// 3 frames ; we keep the first and third one
// ie, remove the second one
$new_image->addImage($frame->getImage());
}
$i++;
}
Итак:
И, в конце концов, чтобы вывести изображение в браузер:
// To directly output to the browser
header('Content-Type: image/gif');
echo $new_image->getImagesBlob();
Или, чтобы записать его в файл:
// To write the new image to a file
// Must use writeImages, and not writeImage (multi-frames ! )
$new_image->writeImages(dirname(__FILE__) . '/animated-gif-output.gif', true);
Каждый из этих выходов содержит только первый и третий кадры; итак, работает ...
Но, как вы сказали, это нехорошо : - (
Я думаю, это, вероятно, будет отлично работать для большинства изображений; у вас могут возникнуть проблемы с большими изображениями, но анимированные GIF-файлы обычно не такие уж большие ... не так ли?
Другой способ - использовать convert из командной строки ... Но ... не так уж и здорово, и я не нашел способа просто удалить фрейм с помощью те либо : - (
Я использовал только утилиты командной строки для IM.
convert srcImage.gif [0] dstImage.gif
Должен помочь, если я не забыл опцию.
[0] относится к первому кадру анимированной гифки.