Для некоторых из них «изучение того, как сделать это самостоятельно» будет значительным мероприятием. Изменение размера изображения, например. Идите дальше и найдите библиотеку с открытым исходным кодом (например, гем), которая изменяет размеры изображений и просматривает ее исходный код. Это не невозможно сделать самостоятельно, но многое из этого основано на опыте, который был раньше, и т. Д. Нет ничего плохого в использовании инструмента, созданного кем-то другим, при условии, что вы понимаете, что это за инструмент делает.
Несколько моментов, которые, надеюсь, помогут вам:
- Придерживайтесь подхода «белого списка» поддерживаемых форматов изображений. Не просто позволяйте пользователям загружать то, что они называют изображением.
- Каждый поддерживаемый вами формат будет иметь свои собственные стандарты (возможно, несколько) для метаданных. Удаление данных оптом может или не может быть хорошей идеей. Например, JPEG может содержать свою ориентацию в своих данных EXIF, и если вы удалите это, вы можете эффективно повернуть изображение. Определенные поля, такие как геотеггинг, вы можете захотеть убрать в попытке защитить конфиденциальность ваших пользователей и т. Д. Опять же, посмотрите на существующие библиотеки и посмотрите, как они это делают.
- НЕ неявно доверяют расширению имени файла для определения типа изображения. Пользователь может создать вредоносный файл, который на самом деле не является изображением, передать его в качестве изображения не подозревающему хосту и эффективно открыть уязвимость безопасности на этом хосте, когда он пытается обработать файл как образ. Возник вопрос об определении типа файла в Ruby здесь , и я уверен, что по этому вопросу можно найти гораздо больше.