worksheet.add_image
时间: 2023-08-09 13:04:55 浏览: 536
`worksheet.add_image` 是一个函数,用于将图像插入到 Excel 工作表中。它的语法如下:
```python
worksheet.add_image(row, col, filename, options)
```
其中,`row` 和 `col` 分别是图像左上角所在的行和列,`filename` 是图像文件的路径,`options` 是一个字典,用于设置图像的选项,例如缩放比例、旋转角度等。示例代码如下:
```python
from openpyxl import Workbook
from openpyxl.drawing.image import Image
# 创建工作簿和工作表
wb = Workbook()
ws = wb.active
# 插入图像
img = Image('image.jpg')
ws.add_image(img, 'B2')
# 保存工作簿
wb.save('example.xlsx')
```
在这个示例中,我们将 `image.jpg` 图像插入到了 `B2` 单元格中。
相关问题
以下代码不用io模块的替代方案是什么?import xlsxwriter # 创建一个新的 Excel 文件并添加一个工作表 workbook = xlsxwriter.Workbook('example.xlsx') worksheet = workbook.add_worksheet() # 设置单元格的宽度和高度 worksheet.set_column('A:A', 30) worksheet.set_row(1, 150) # 定义要插入的图片路径 image_path = 'example.jpg' # 获取图片的宽度和高度 with open(image_path, 'rb') as f: image_data = f.read() image_width, image_height = PIL.Image.open(io.BytesIO(image_data)).size # 插入图片并保持原始宽高比 worksheet.insert_image('A2', image_path, {'x_scale': 1, 'y_scale': 1, 'image_data': image_data, 'object_position': 1}) # 关闭 Excel 文件 workbook.close()
可以使用 `Pillow` 库中的 `Image` 类来获取图片的尺寸信息,而无需使用 `io` 模块:
```python
import xlsxwriter
from PIL import Image
# 创建一个新的 Excel 文件并添加一个工作表
workbook = xlsxwriter.Workbook('example.xlsx')
worksheet = workbook.add_worksheet()
# 设置单元格的宽度和高度
worksheet.set_column('A:A', 30)
worksheet.set_row(1, 150)
# 定义要插入的图片路径
image_path = 'example.jpg'
# 获取图片的宽度和高度
with open(image_path, 'rb') as f:
image_data = f.read()
image_width, image_height = Image.open(image_path).size
# 插入图片并保持原始宽高比
worksheet.insert_image('A2', image_path, {'x_scale': 1, 'y_scale': 1, 'image_data': image_data, 'object_position': 1})
# 关闭 Excel 文件
workbook.close()
```
这里使用 `Pillow` 库中的 `Image` 类的 `open()` 方法打开图片文件 `image_path`,并使用 `size` 属性获取图片的宽度和高度信息。由于 `insert_image()` 方法需要传入图片的二进制数据,因此在插入图片时仍需要读取一次图片的二进制数据。
以下代码有什么错误,怎么修改: import tensorflow.compat.v1 as tf tf.disable_v2_behavior() from PIL import Image import matplotlib.pyplot as plt import input_data import model import numpy as np import xlsxwriter num_threads = 4 def evaluate_one_image(): workbook = xlsxwriter.Workbook('formatting.xlsx') worksheet = workbook.add_worksheet('My Worksheet') with tf.Graph().as_default(): BATCH_SIZE = 1 N_CLASSES = 4 image = tf.cast(image_array, tf.float32) image = tf.image.per_image_standardization(image) image = tf.reshape(image, [1, 208, 208, 3]) logit = model.cnn_inference(image, BATCH_SIZE, N_CLASSES) logit = tf.nn.softmax(logit) x = tf.placeholder(tf.float32, shape=[208, 208, 3]) logs_train_dir = 'log/' saver = tf.train.Saver() with tf.Session() as sess: print("从指定路径中加载模型...") ckpt = tf.train.get_checkpoint_state(logs_train_dir) if ckpt and ckpt.model_checkpoint_path: global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1] saver.restore(sess, ckpt.model_checkpoint_path) print('模型加载成功, 训练的步数为: %s' % global_step) else: print('模型加载失败,checkpoint文件没找到!') prediction = sess.run(logit, feed_dict={x: image_array}) max_index = np.argmax(prediction) workbook.close() def evaluate_images(test_img): coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(coord=coord) for index,img in enumerate(test_img): image = Image.open(img) image = image.resize([208, 208]) image_array = np.array(image) tf.compat.v1.threading.Thread(target=evaluate_one_image, args=(image_array, index)).start() coord.request_stop() coord.join(threads) if __name__ == '__main__': test_dir = 'data/test/' import glob import xlwt test_img = glob.glob(test_dir + '*.jpg') evaluate_images(test_img)
在代码中,我注意到了几个错误:
1. 在导入`input_data`和`model`模块时,代码中没有找到这两个模块的导入语句。
2. `evaluate_one_image`函数中的`image_array`参数未定义。
3. 在`evaluate_images`函数中,`tf.train.Coordinator()`和`tf.train.start_queue_runners()`函数之间缺少了一个空行。
4. 在调用`evaluate_one_image`函数时,传递的参数应该是`(image_array, index)`而不是`(image_array, index)`。
以下是修改后的代码:
```python
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
from PIL import Image
import matplotlib.pyplot as plt
import input_data
import model
import numpy as np
import xlsxwriter
num_threads = 4
def evaluate_one_image(image_array, index):
workbook = xlsxwriter.Workbook('formatting.xlsx')
worksheet = workbook.add_worksheet('My Worksheet')
with tf.Graph().as_default():
BATCH_SIZE = 1
N_CLASSES = 4
image = tf.cast(image_array, tf.float32)
image = tf.image.per_image_standardization(image)
image = tf.reshape(image, [1, 208, 208, 3])
logit = model.cnn_inference(image, BATCH_SIZE, N_CLASSES)
logit = tf.nn.softmax(logit)
x = tf.placeholder(tf.float32, shape=[208, 208, 3])
logs_train_dir = 'log/'
saver = tf.train.Saver()
with tf.Session() as sess:
print("从指定路径中加载模型...")
ckpt = tf.train.get_checkpoint_state(logs_train_dir)
if ckpt and ckpt.model_checkpoint_path:
global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]
saver.restore(sess, ckpt.model_checkpoint_path)
print('模型加载成功, 训练的步数为: %s' % global_step)
else:
print('模型加载失败,checkpoint文件没找到!')
prediction = sess.run(logit, feed_dict={x: image_array})
max_index = np.argmax(prediction)
workbook.close()
def evaluate_images(test_img):
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
for index, img in enumerate(test_img):
image = Image.open(img)
image = image.resize([208, 208])
image_array = np.array(image)
tf.compat.v1.threading.Thread(target=evaluate_one_image, args=(image_array, index)).start()
coord.request_stop()
coord.join(threads)
if __name__ == '__main__':
test_dir = 'data/test/'
import glob
import xlwt
test_img = glob.glob(test_dir + '*.jpg')
evaluate_images(test_img)
```
请注意,我只修复了我在代码中发现的错误,并没有对其他部分进行修改。如果还有其他错误或问题,请提供更多信息,以便我能够更好地帮助你。
阅读全文