Эта ошибка чаще всего встречается при попытке ссылаться на значение массива с помощью ключевого слова для интерполяции внутри строки с двумя кавычками , когда вся конструкция комплексной переменной не заключена в {}
.
Это приведет к Unexpected T_ENCAPSED_AND_WHITESPACE
:
echo "This is a double-quoted string with a quoted array key in $array['key']";
//---------------------------------------------------------------------^^^^^
В строке с двойными кавычками PHP разрешает использовать строки ключей ключей без кавычек и не выдаст E_NOTICE
. Таким образом, вышесказанное может быть записано как:
echo "This is a double-quoted string with an un-quoted array key in $array[key]";
//------------------------------------------------------------------------^^^^^
Вся сложная переменная массива и ключ (ы) могут быть заключены в {}
, и в этом случае они должны быть указаны чтобы избежать E_NOTICE
. Документация PHP рекомендует этот синтаксис для сложных переменных.
echo "This is a double-quoted string with a quoted array key in {$array['key']}";
//--------------------------------------------------------------^^^^^^^^^^^^^^^
// Or a complex array property of an object:
echo "This is a a double-quoted string with a complex {$object->property->array['key']}";
Конечно, альтернатива любой из вышеперечисленного заключается в объединении переменной массива in вместо интерполировать его:
echo "This is a double-quoted string with an array variable " . $array['key'] . " concatenated inside.";
//----------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^
Для справки см. раздел «Переменная синтаксический анализ» в странице руководства PHP Strings
Вы не говорите, как точно putdata()
не ведет себя. Я предполагаю, что Вы делаете
>>> pic.putdata(a)
Traceback (most recent call last):
File "...blablabla.../PIL/Image.py", line 1185, in putdata
self.im.putdata(data, scale, offset)
SystemError: new style getargs format but argument is not a tuple
, Это вызвано тем, что putdata
ожидает последовательность кортежей, и Вы даете ей массив numpy. Это
>>> data = list(tuple(pixel) for pixel in pix)
>>> pic.putdata(data)
будет работать, но это очень медленно.
С PIL 1.1.6, "надлежащий" способ преобразовать между изображениями и массивами numpy просто
>>> pix = numpy.array(pic)
, хотя полученный массив находится в другом формате, чем Ваш (3-й массив или rows/columns/rgb в этом случае).
Затем после внесения изменений в массив необходимо быть в состоянии сделать или pic.putdata(pix)
или создать новое изображение с Image.fromarray(pix)
.
Открыть I
в виде массива:
>>> I = numpy.asarray(PIL.Image.open('test.jpg'))
Сделайте что-нибудь с I
, затем преобразуйте его обратно в изображение:
>>> im = PIL.Image.fromarray(numpy.uint8(I))
Отфильтруйте количество изображений с помощью БПФ, Python
Если вы хотите сделать это явно по какой-то причине существуют функции pil2array () и array2pil (), использующие getdata () на этой странице в correlation.zip.