This question was ask man, many times ... Problem is in type of last column, r
(as was assumed in comments) assume that contents will be in one line and it adopt its width to the line. You need to change r
to p{<width>}
or (better} to m{<width>}
:
\documentclass[a4paper,10pt]{report}
\usepackage[margin=1cm]{geometry}
\setlength\columnsep{1cm}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage{lipsum}
\usepackage{calc}
\usepackage{array}
\begin{document}
\begin{multicols}{2}
\lipsum[1-3]
\noindent
\begin{tabular}{@{}m{0.4\linewidth-2\tabcolsep-2\arrayrulewidth}
m{0.6\linewidth}@{}}
\includegraphics[width=\hsize]{example-image-a}
&
\lipsum[2]
\end{tabular}
\noindent
\begin{tabular}{@{}m{0.6\linewidth}
m{0.4\linewidth-2\tabcolsep-2\arrayrulewidth}@{}}
\lipsum[2]
&
\includegraphics[width=\hsize,height=17\baselineskip]{example-image-b}
\end{tabular}
\end{multicols}
\end{document}
For determination of column type and width I use packages array
(for m
) and calc
(for calculation).
which gives:

Edit: For exploit full width of column I add \noindent
before table and erase -2\tabcolsep-2\arrayrulewidth
from determination of the second column width.
Edit: The change order of columns with text and image is simple, in first table column you put a text and in second your image. To fit image ov table cell height, you need add option height
into \includegraphics
. But note: this will destroy original aspect ratio of image. To show this, I replace existed MWE with new one, which show this (see corrected MWE and above picture).
r
column (where line breaking wont occur) with ap
column, e.g.p{4cm}
(where automatic line breaking will occur).