Я пытаюсь использовать Google Image Manipulation API. Это кажется довольно простым, но когда я вызываю execute_transforms
объект Image
, он выдает общее сообщение «Произошла ошибка».
gcs_file_location
правильно, никаких ошибок не возникает, пока я не вызову execute_transforms(). Файл изображения не слишком большой.
from google.appengine.api import images
gcs_file_location = '/gs/' + gcs_file_location
img = images.Image(filename=gcs_file_location)
img.resize(width=50, height=50)
# The following code throws "There has been an error"
thumbnail = img.execute_transforms()
Он действительно имеет тип <class 'google.appengine.api.images.Image'>, и в журналах App Engine также не регистрируется сообщение об ошибке!
Я воспроизвел вашу ошибку, используя официальную документацию пример кода. Из этого кода я просто изменил его, чтобы получить в качестве параметра http (id
) путь к изображению (/gs/<bucket name>/<img path>
), затем я развернул его, и он работал правильно. Не могли бы вы написать точные шаги, которые вы предпринимаете, чтобы увидеть эту ошибку, также было бы здорово увидеть весь код, чтобы воспроизвести вашу ошибку, спасибо.
Одно отличие состоит в том, что я использую Django для серверной веб-инфраструктуры. Является ли django несовместимым с Google Imaging API или мне нужно импортировать WebApp2? Кроме этого, весь соответствующий код показан выше, и я вполне уверен, что путь GS правильный, он отформатирован следующим образом: /gs/371/3612ae-63163s-3. Спасибо за ответ.
Мне потребовалось некоторое время, но мне удалось воспроизвести ваш сценарий, поэтому я настроил среду Питон 2.7 (в соответствии с руководством для Обзор Python API изображений и установил все файлы, необходимые для Django, используя код из официальный репозиторий и запустив его с помощью официальный учебник для Джанго.
Затем я изменил опросы службы, чтобы выполнять функции, вызывающие эти ошибки.
def index(request):
filename_gs=request.GET.get("id")
img = images.Image(filename=filename_gs)
img.resize(width=1000, height=1000)
thumbnail = img.execute_transforms()
И я обнаружил, что действительно вы правы, в функции execute_transforms
возникает ошибка и останавливается выполнение. Однако у меня не было общей ошибки, на которую вы ссылаетесь, я получаю следующее:
File "/home/polortiz/DJANGOOO/mytry3/python-docs-samples/appengine/standard/django/polls/views.py", line 48, in index
thumbnail = img.execute_transforms()
File "/google/google-cloud-sdk/platform/google_appengine/google/appengine/api/images/__init__.py", line 810, in execute_transforms
return rpc.get_result()
File "/google/google-cloud-sdk/platform/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 615, in get_result
return self.__get_result_hook(self)
File "/google/google-cloud-sdk/platform/google_appengine/google/appengine/api/images/__init__.py", line 898, in execute_transforms_hook
raise _ToImagesError(e, self._blob_key)
TransformationError
Я продолжил расследование, чтобы проверить, какие проблемы могут вызывать эти ошибки, и нашел файл библиотечный код этой функции. Там вы могли увидеть все исключения, которые возникают:
- BadRequestError: When the request specifications are invalid.
- NotImageError: When the image data given is not an image.
- BadImageError: When the image data given is corrupt.
- LargeImageError: When the image data given is too large to process.
- InvalidBlobKeyError: When the blob key provided is invalid.
- TransformationError: When an error occurs during image manipulation.
- AccessDeniedError: When the blob key refers to a Google Storage object, and the application does not have permission to access the object.
- ObjectNotFoundError: When the blob key refers to an object that no longer exists.
Итак, для решения вашей проблемы было бы здорово проверить все эти пункты. Отвечая на вопросы, заданные в комментариях:
Is django not compatible with Google's Imaging API or do I need to import WebApp2?
Google Imaging API совместим с Django. И не обязательно использовать WebApp2 для обработки HTTP-запросов и ответов.
Спасибо, Пол, в конечном итоге я использовал библиотеку изображений Python для манипуляций с изображениями, так как просто не смог заставить ее работать. Вероятно, это та же ошибка преобразования, что и у вас, которая все еще является довольно общей ошибкой. Я приму ваш ответ, если вы когда-нибудь выясните, что именно происходит, я хотел бы услышать об этом.
Недавно я тоже заметил эту проблему при использовании get_serving_url()
для файлов изображений в корзине GCS у которого отключены детальные разрешения. По какой-то причине кажется, что API изображений выбрасывает TransformationError
такое ведро, даже если никакого преобразования не происходит. Вот ошибка, открытая с Google, который отмечает, что нужно создать новую корзину и обязательно использовать детализированные разрешения, чтобы избежать ошибки.
Я сделал тест с тем же кодом, но читая с локального изображения, функция
img.execute_transforms()
не вызывала это общее «Произошла ошибка», поэтому убедитесь, что изображение правильно читается, а типimg
-<class 'google.appengine.api.images.Image'>
. Также поищите в журналах эту ошибку, возможно, там есть более конкретная трассировка стека ошибки.