Когда нужно собрать фотки, скриншоты или диаграммы в один файл — забудь про ручное копирование.
Python решает задачу в несколько строк кода: просто передай список изображений, и на выходе получишь аккуратный PDF.
from fpdf import FPDF
from pathlib import Path
from typing import List
def images_to_pdf(images: List[str], output: str = "output.pdf") -> None:
"""
Конвертирует список изображений в единый PDF-файл.
:param images: список путей к изображениям (JPG, PNG и т.д.)
:param output: имя выходного PDF-файла
"""
pdf = FPDF()
for img_path in images:
if not Path(img_path).exists():
print(f"⚠️ Файл не найден: {img_path}")
continue
pdf.add_page()
pdf.image(img_path, x=10, y=10, w=180) # подгоняем ширину под страницу
pdf.output(output)
print(f"✅ PDF создан: {output}")
if __name__ == "__main__":
# Пример использования
images_to_pdf(
["image1.jpg", "image2.png", "image3.jpg"],
"images_collection.pdf"
)
Что умеет скрипт:
#python #soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
👍44❤12🔥10
Хочешь превратить ноутбук в мини‑студию?
Чистый скрипт на OpenCV, который:
from dataclasses import dataclass
from pathlib import Path
from typing import Tuple, Optional
import cv2
@dataclass(frozen=True)
class CaptureConfig:
"""Настройки захвата видео с веб‑камеры."""
device_index: int = 0 # индекс камеры (0 — встроенная)
width: int = 640 # ширина кадра
height: int = 480 # высота кадра
fps: int = 20 # кадров в секунду
fourcc: str = "mp4v" # кодек для MP4: mp4v, для AVI: XVID
def create_capture(cfg: CaptureConfig) -> cv2.VideoCapture:
"""Создаёт и настраивает объект VideoCapture."""
cap = cv2.VideoCapture(cfg.device_index)
if not cap.isOpened():
raise RuntimeError("Не удалось открыть веб‑камеру")
cap.set(cv2.CAP_PROP_FRAME_WIDTH, cfg.width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, cfg.height)
cap.set(cv2.CAP_PROP_FPS, cfg.fps)
return cap
def create_writer(output_path: Path, cfg: CaptureConfig) -> cv2.VideoWriter:
"""Создаёт объект записи видео (VideoWriter)."""
output_path.parent.mkdir(parents=True, exist_ok=True)
fourcc = cv2.VideoWriter_fourcc(*cfg.fourcc)
writer = cv2.VideoWriter(str(output_path), fourcc, cfg.fps, (cfg.width, cfg.height))
if not writer.isOpened():
raise RuntimeError(f"Не удалось создать файл для записи: {output_path}")
return writer
def record_from_webcam(
output_path: Path,
cfg: CaptureConfig = CaptureConfig(),
window_title: str = "Video",
) -> Tuple[bool, Optional[str]]:
"""
Захватывает поток с веб‑камеры, показывает превью и пишет в файл.
Возвращает (успех, сообщение_ошибки).
Остановка по клавише 'q'.
"""
try:
cap = create_capture(cfg)
writer = create_writer(output_path, cfg)
except Exception as e:
return False, str(e)
try:
while True:
ok, frame = cap.read()
if not ok:
return False, "Не удалось прочитать кадр с камеры"
writer.write(frame)
cv2.imshow(window_title, frame)
# выход по 'q'
if cv2.waitKey(1) & 0xFF == ord("q"):
break
return True, None
finally:
cap.release()
writer.release()
cv2.destroyAllWindows()
def main() -> None:
cfg = CaptureConfig(
device_index=0,
width=640,
height=480,
fps=20,
fourcc="mp4v", # для .mp4; можно 'XVID' для .avi
)
ok, err = record_from_webcam(Path("records/vid.mp4"), cfg)
if ok:
print("✅ Запись завершена. Файл: records/vid.mp4")
else:
print(f"❌ Ошибка: {err}")
if __name__ == "__main__":
main()
Код структурирован на функции, есть @dataclass для настроек — бери, редактируй и встраивай в свой проект.
pip install opencv-python
records/vid.mp4
Сохраняй, пригодится!
#python #soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥12❤5